首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular: service和ngrx返回undefined

基础概念

在Angular中,service是一种用于封装可重用的业务逻辑的类。它们通常用于在组件之间共享数据和方法。ngrx是一个状态管理库,用于Angular应用程序,它基于Redux模式,帮助管理应用程序的状态。

问题分析

当你在Angular中使用servicengrx时,可能会遇到返回undefined的情况。这通常是由于以下原因之一:

  1. Service未正确注入:确保在组件或模块中正确注入了服务。
  2. ngrx Store未正确配置:确保在模块中正确配置了ngrx store,并且在组件中正确订阅了store。
  3. 初始状态未定义:如果ngrx store的初始状态未定义,可能会导致返回undefined
  4. 选择器(Selectors)未正确使用:确保在组件中正确使用了ngrx的选择器来获取状态。

解决方法

1. 确保Service正确注入

代码语言:txt
复制
// my.service.ts
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class MyService {
  getData() {
    return 'some data';
  }
}
代码语言:txt
复制
// my.component.ts
import { Component } from '@angular/core';
import { MyService } from './my.service';

@Component({
  selector: 'app-my',
  template: `<div>{{ data }}</div>`
})
export class MyComponent {
  data: string;

  constructor(private myService: MyService) {
    this.data = this.myService.getData();
  }
}

2. 确保ngrx Store正确配置

代码语言:txt
复制
// store.ts
import { createAction, createReducer, on, createSelector, createFeatureSelector } from '@ngrx/store';

export const initialState = {
  data: undefined
};

export const setData = createAction('[Data] Set Data', (data: any) => ({ data }));

export const dataReducer = createReducer(
  initialState,
  on(setData, (state, { data }) => ({ ...state, data }))
);
代码语言:txt
复制
// app.module.ts
import { NgModule } from '@angular/core';
import { StoreModule } from '@ngrx/store';
import { dataReducer } from './store';

@NgModule({
  imports: [
    StoreModule.forRoot({ data: dataReducer })
  ]
})
export class AppModule {}
代码语言:txt
复制
// my.component.ts
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { setData } from './store';

@Component({
  selector: 'app-my',
  template: `<div>{{ data$ | async }}</div>`
})
export class MyComponent {
  data$ = this.store.select(state => state.data);

  constructor(private store: Store) {
    this.store.dispatch(setData({ data: 'some data' }));
  }
}

3. 确保初始状态已定义

代码语言:txt
复制
// store.ts
export const initialState = {
  data: 'initial data'
};

4. 确保选择器正确使用

代码语言:txt
复制
// store.ts
export const selectData = createSelector(
  (state) => state.data,
  (data) => data
);
代码语言:txt
复制
// my.component.ts
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { selectData } from './store';

@Component({
  selector: 'app-my',
  template: `<div>{{ data$ | async }}</div>`
})
export class MyComponent {
  data$ = this.store.select(selectData);

  constructor(private store: Store) {}
}

参考链接

通过以上步骤,你应该能够解决在使用Angular的servicengrx时遇到的undefined问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

    /services/card.service'; [...]...反应角 - Ngrx 让我们来谈谈我们的应用程序状态,我的意思是我们的应用程序的所有属性,它们的字面定义其当前的行为状态。...State是一个单一的,不可变的数据结构 - 至少Ngrx为我们实现它的方式。Ngrx是由Redux提供灵感的“RxJS支持Angular应用程序的状态管理库”。 Ngrx的灵感来自Redux。...为此,我们使用Reducers的纯函数,这意味着对于任何给定的StateAction它的payloadreducer,它将返回与使用相同参数的reducer函数的任何其他调用相同的状态。...什么是NgRXNgRX是一种管理应用程序状态的模式。这是一个支持Angular应用程序的RxJS驱动的状态管理库。

    42.6K10

    同样做前端,为何差距越来越大?

    由于历史原因,开发框架同时基于 React Angular,考虑到产品的复杂性、人员的短缺技术背景各异,我们尝试了各种方法打磨工具体系来提升开发效率,以下分享五点。 ?...我们先后尝试过原生 Redux、分形 Fractal 的思路、自研类 Mobx 框架、Angular Service,最终认为 Redux 依旧是复杂应用数据流处理最佳选项之一。...庆幸的是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样的能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...对于 Fetch 返回的数据我们定义了 AsyncTuple 这种类型,减少了样板代码; 明确的组织结构,第1层是 ROOT,第2层是各个页面,第3层是页面内的卡片,第4层是卡片的数据,这样划分最深处基本不会超过...曾经 React Angular 是两个很难调和的框架,开发中浪费了我们大量的人力。

    1.2K20

    【译】我是如何学习任意前端框架的

    每次你决定学习前端框架时,你定会反复听到这些术语(组件,路由管理状态/状态管理)。 下面我们逐步了解下: 组件 任何框架的核心都是以创建组件来达到复用的目的。...现在,所有框架都提供API来管理你的状态(例如Angular有一个Service,React现在有Context API)以及当你的数据规模变大之后,你可以考虑使用像redux这样的库。...1.查找 & 显示 (模仿) 常用的首个应用是使用其公共的API来模仿任何已知站点,尝试构建一个带下拉列表的搜索栏,来保存来自端点API的结果,检查其返回的数据,然后再显示它,就像有张图像一样(显示)或不显示...项目实例: 书签应用 To-Do App 你将学到: 验证用户的表单输入,如果用户输入错误就提示错误信息 如何创建put、delete、postget的HTTP请求 将你的应用程序任意后端框架集成...你将学到: 学习如何使用管理状态解决方案,如redux for react, ngrx for angular 2+ 或 vuex for vuejs以及如何将其与客户端应用程序集成 使你的应用更灵活

    3.6K10

    给2019前端开发的你5个进阶建议~

    由于历史原因,开发框架同时基于 React Angular,考虑到产品的复杂性、人员的短缺技术背景各异,我们尝试了各种方法打磨工具体系来提升开发效率,以下是节选的5项主要方法。...我们先后尝试过原生 Redux、分形 Fractal 的思路、自研类 Mobx 框架、Angular Service,最终认为 Redux 依旧是复杂应用数据流处理最佳选项之一。...庆幸的是除了 React 社区,Vue 社区有类似的 Vuex,Angular 社区有 NgRx 也提供了几乎同样的能力,甚至 NgRx 还可以无缝使用 redux-devtools 来调试状态变化。...对于 Fetch 返回的数据我们定义了 AsyncTuple 这种类型,减少了样板代码 明确的组织结构,第1层是 ROOT,第2层是各个页面,第3层是页面内的卡片,第4层是卡片的数据,这样划分最深处基本不会超过...曾经 React Angular 是两个很难调和的框架,开发中浪费了我们大量的人力。

    1K10

    写在 2021: 值得关注学习的前端框架工具库

    学习成本,低情商:学Angular还要学TSRxJS;高情商:学了Angular我就会TSRxJS了!...我正在捣鼓的新项目就是基于Angular + Nest,越写越爽。 如果你打算AngularNest都学,我的建议是先学Nest,这样入门Angular的学习路线会更平滑一点。...NgRx[93],很好用的Angular的状态管理方案,写法Redux非常像,也是action >>> reducer >>> state,所以几乎可以没有什么成本的上手。...秉承了Angular的思想,提供了一整套的集成:Angular Router的集成:@ngrx/router-store;对于集合类型的适配:@ngrx/entity;副作用管理:@ngrx/effects...,以及必不可少的schematics:@ngrx/schematics等,最大的优势是RxJS的深度集成。

    4.2K10

    前端框架与库 - Angular基础:组件、模板、服务

    组件包括三个主要部分:类、模板样式。类:定义组件的行为逻辑。模板:定义组件的视图结构,即用户界面。样式:定义组件的外观。...服务服务是 Angular 中用于封装业务逻辑的类,通常用于数据获取、状态管理等。服务可以通过依赖注入系统在整个应用中共享复用。.../data.service';@Component({ selector: 'app-root', template: ` <li *ngFor="let item of...性能问题<em>undefined</em>过度使用ngFor<em>和</em>ngIf可能导致不必要的渲染。优化这些指令的使用,例如,使用TrackBy函数减少重复渲染。...通过理解<em>和</em>应用这些原则,你可以构建健壮、高效的 <em>Angular</em> 应用,避免常见的开发陷阱。

    13510

    前端框架选择指南:React vs Vue vs Angular

    选择前端框架时,React、Vue Angular 都是流行的选择,各有优缺点。我们可以从各个维度进行比较选择:React核心理念: 组件化开发,专注于视图层。...状态管理: 提供NgRx等库进行状态管理。适合: 大型企业级项目,需要严格结构规范的团队。...Angular: 社区相对较小,但由Google支持,有Angular Material等官方UI库。扩展性可维护性React: 组件化设计,易于拆分复用,但需要良好的架构设计。...Angular: 提供ng serve --i18n ng xi18n 命令,以及Angular i18n工具链,内置支持。...React适合需要高度定制灵活性的项目,Vue适合快速开发维护,Angular则适合大型、结构严谨的企业级应用。在做出决定时,务必考虑项目的需求、团队的技术背景、长期维护扩展性等因素。

    14100

    写在2021: 值得关注学习的前端框架工具库

    学习成本,低情商:学Angular还要学TSRxJS;高情商:学了Angular我就会TSRxJS了!...我正在捣鼓的新项目就是基于Angular + Nest,越写越爽。 如果你打算AngularNest都学,我的建议是先学Nest,这样入门Angular的学习路线会更平滑一点。...NgRx,很好用的Angular的状态管理方案,写法Redux非常像,也是action >>> reducer >>> state,所以几乎可以没有什么成本的上手。...秉承了Angular的思想,提供了一整套的集成:Angular Router的集成:@ngrx/router-store;对于集合类型的适配:@ngrx/entity;副作用管理:@ngrx/effects...,以及必不可少的schematics:@ngrx/schematics等,最大的优势是RxJS的深度集成。

    2.9K10

    Angular vs React 最全面深入对比

    严格说来,AngularReact的比较是不公平的,因为Angular是一个功能丰富的框架,而React是一个UI的组件库,所以我们在接下来的分析中会将一些经常React在一起使用的类库放在一起讨论...该类库已被Angular采用其HTTP模块以及一些内部使用。当您执行HTTP请求时,它返回一个Observable,而不是通常的Promise。 虽然这个类库非常强大,但也很复杂。...Angular Angular CLI 现代框架的流行趋势是使用CLI工具,可以帮助您引导项目,而无需自行配置构建。AngularAngular CLI。它允许您仅使用几个命令来生成运行项目。...@ngrx/store @ngrx/store是由Redux启发的Angular的状态管理库,基于由pure reducer进行突变的状态。...它提供了一种在服务器上完全或部分呈现应用程序的灵活方式,将结果返回给客户端并在浏览器中继续。

    3.8K70

    对开源框架跃跃欲试,却在写的时候犯了难?

    所以我分别从 前端、后端、客户端 分类中,挑选了几个相对不错的项目,方便大家参考学习。 二、实战项目 下面是我翻遍了整个 RealWorld 项目,筛选出的精品项目。...github.com/mutoe/vue3-realworld-example-app Vue + Nuxt 地址:https://github.com/pocojang/nuxt-realworld Angular...+ NgRx + Nx 地址:https://github.com/stefanoslig/angular-ngrx-nx-realworld-example-app React + Next + SWR...又因为不同框架实现的都是一套功能,可以更直观地对比出框架间的区别特点,还能有助于你做技术选型。...正所谓 千里之行始于足下——《道德经》 也只有掌握了基础的功能,才能玩转这些开源框架,从而扩充你的武器库,在应对不同场景多变的需求,能够做到举重若轻泰然自若。

    59210
    领券