在组件中使用 ngxs 选择器
Using ngxs Selectors in Components
我将 ngxs 与 Angular 一起使用,现在当我尝试从商店中获取更改时,我在状态
中定义了一个选择器
@Selector()
static getData(state : DataStateModel){
return state.data;
}
并且在组件中我使用 @Select 装饰器来获得一个 observable
@Select(DataState.getData) data$;
我遇到的麻烦是,如果我必须在组件中访问此数据,我将订阅 data$ observable 并将数据保存到组件中的新变量。
ngOnInit() {
this.datasubscription = this.data$.subscribe( data => {this.componentVar = data});
}
这需要我手动退订。这是实现这个的正确方法吗?是否有任何内置功能或第三方插件可以帮助清理这部分?
我也试过了。
store.snapshot()
如果您不想在组件代码中管理订阅,您可以使用 Select
装饰器中的 Observable 来组成一个新的 Observable 链,例如在这个例子中 dataChanged$
。在通过 rxjs
tap
运算符观察到的情况下,您可以 运行 进行一些验证或切换变量等,如您在评论中所述。
@Select(DataState.getData) data$;
dataChanged$: Observable<any>;
ngOnInit() {
this.dataChanged$ = this.data$.pipe(
tap(result => // do something)
);
}
然后在您的模板中,通过 async
管道订阅 $dataChanged
。
另一种选择当然是在为此组件调用 ngOnDestroy
时手动取消订阅。
我将 ngxs 与 Angular 一起使用,现在当我尝试从商店中获取更改时,我在状态
中定义了一个选择器@Selector()
static getData(state : DataStateModel){
return state.data;
}
并且在组件中我使用 @Select 装饰器来获得一个 observable
@Select(DataState.getData) data$;
我遇到的麻烦是,如果我必须在组件中访问此数据,我将订阅 data$ observable 并将数据保存到组件中的新变量。
ngOnInit() {
this.datasubscription = this.data$.subscribe( data => {this.componentVar = data});
}
这需要我手动退订。这是实现这个的正确方法吗?是否有任何内置功能或第三方插件可以帮助清理这部分? 我也试过了。
store.snapshot()
如果您不想在组件代码中管理订阅,您可以使用 Select
装饰器中的 Observable 来组成一个新的 Observable 链,例如在这个例子中 dataChanged$
。在通过 rxjs
tap
运算符观察到的情况下,您可以 运行 进行一些验证或切换变量等,如您在评论中所述。
@Select(DataState.getData) data$;
dataChanged$: Observable<any>;
ngOnInit() {
this.dataChanged$ = this.data$.pipe(
tap(result => // do something)
);
}
然后在您的模板中,通过 async
管道订阅 $dataChanged
。
另一种选择当然是在为此组件调用 ngOnDestroy
时手动取消订阅。