在Resolver里面获取数据,一般可以像下面这样写
resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> { return this.store.pipe( select(selectXXX), tap((data) => { if (!data) { // 自行根据实际做判断 // Dispatch action to load data. this.store.dispatch(new GetDataAction()); } }), filter((data) => { return !!data; // 自行根据实际做判断 }), first() ); }
这样写,在resolver执行时,先调用selector,然后在tap里面去做判断,没数据就去触发effect请求数据,然后filter执行,因为没有数据,所以返回false,first方法得不到数据,因此resolver返回的Observable就不会被完成,下一个component不会被加载。这里filter的返回值很重要,如果是true,那么first就会使Observable完成,直接加载下一个component。
当数据请求完毕,用reducer存入store时,只有数据确实发生了变化,resolver这里的pipe中的方法才会再次执行。tap就可以获取数据,不再调用effect请求数据,并且filter返回true,first可以取得数据(数据的值不重要),然后返回数据中的第一个,使resolver的Observable完成,加载下一个component。
这里需要注意的地方是,当effect调用service请求数据失败,要如何做异常处理,防止store中的数据被修改,让tap再次调用effect请求数据。处理不当,会导致UI不停发送给请求,知道取到数据为止。
相关推荐
【标题】:“Python-NGRX和Angular的ReactiveForms绑定” 在现代Web应用开发中,状态管理和表单处理是两个核心部分。此主题探讨的是如何将Python中的NGRX(一个强大的状态管理库)与Angular的Reactive Forms进行...
Angular 10,NgRx和Angular Material Starter 通过 表中的内容 (获取有关最新版本的通知,在Twitter上 ) 入门 git clone https://github.com/tomastrajan/angular-ngrx-material-starter.git new-project cd new...
`ngrx-entity-relationship`是针对Angular的一个库,它结合了NGRX库的功能,特别是`@ngrx/store`和`@ngrx/effects`,来帮助开发者更好地管理和操作应用状态,尤其是处理实体(entities)的关系。这个库的目标是提供...
**标题解析:** "Apress.Reactive.Programming.with.Angular.and.ngrx" 这个标题表明本书主要探讨的是如何在Angular框架中利用反应式编程(Reactive Programming)技术,特别是通过使用ngrx库和RxJS库来实现这一目标...
使用Redux,RxJs和NgRx构建Angular应用程序 这是发布的用于的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。 关于这本书 本书首先回顾性地介绍了我们在AngularJS中构建应用程序的方式。 我们还将...
Angular-angular-ngrx-nx-realworld-example-app.zip,示例性真实世界应用程序,由angular 8、ngrx 8、nrwl/nx 8angular、ngrx/平台、nrwl/nx代码库构建,包含遵循真实世界规范和api的真实世界示例(crud、auth、高级...
Angular-ngrx-GettingStarted NgRx课程的材料。 APM-Demo0 :本课程的入门文件。 使用此代码与课程一起编码。 APM-Demo1 :首次查看NgRx模块后的已完成文件。 它展示了一个非常简单的NgRx示例。 APM-Demo2 :...
"ms-todo-app" 是一个基于Angular框架和ngrx库构建的待办事项应用程序。这个项目展示了如何在Angular应用中有效地管理状态,特别是在大型项目中,使用ngrx的状态管理可以帮助提高代码的可维护性和可测试性。以下是对...
Ngxs是Angular的状态管理和状态流库,它结合了Ngrx和RxJS的最佳特性。Ngxs的核心理念是使用RxJS流处理状态,使得状态更新更加灵活和可测试。它支持Action、State、Selector和Effect,类似于Ngrx,但其API设计更加...
Angular-angular-ngrx-data.zip,与NGRx的角度和实验NGRx数据帮助常规NGRx数据,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员...
Angular-Ionic是一个强大的移动应用开发框架,结合了Angular和Ionic的优点,用于构建高效、跨平台的移动应用。在这个小应用程序中,还引入了ngrx库,它是一个基于Redux的状态管理工具,专门为Angular设计。下面我们...
Angular-angular-ngrx-chuck-norris.zip,查克诺里斯笑话发生器w/ngrx存储角度ngrx查克诺里斯笑话发生器,Angularjs于2016年发布,是Angularjs的重写版。它专注于良好的移动开发、模块化和改进的依赖注入。angular的...
《高清PDFReactive Programming with Angular and ngrx》是一本深度探讨如何在Angular应用程序中使用反应式编程和ngrx库的专业书籍。这本书旨在帮助开发者更好地理解和掌握这两种强大的技术,以提升现代Web应用的...
在开始结合使用Angular8和ngrx8之前,我们需要创建一个新的Angular项目。这可以通过Angular CLI完成: ```bash ng new angular-ngrx ``` 接下来,我们创建一个名为`AppStoreModule`的数据模块,并在`store`文件夹...
一个完整的Angular入门项目 :smiling_face_with_heart-eyes:表中的内容入门git clone https://github.com/truonghungit/angular-starter.git new-projectcd new-projectyarnyarn start开发服务器润yarn start或ng ...
store-log-monitor, @ngrx/store devtools和 Angular的日志监视器 @ngrx/store-log-monitor 用于 Angular 2和 @ngrx/store-devtools的 redux-devtools-log-monitor端口设置从 npm 安装 @ngrx/store-log
角度该项目是使用版本11.2.2生成的。开发服务器为开发服务器运行ng serve 。... 如果您更改任何源文件,该应用程序将自动重新加载。...进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看“ 页面。