我创建了自己的商店
export interface IAppState {
cartData:ICartItem[];
lastUpdate:Date;
}并添加一些reducer来处理添加和删除操作
但在很多地方,我只需要商店里的最新数据。根据文档,将attr @select()添加到存储项中就足够了,添加您将获得当前状态。
但我已经创建了一些服务,它将做所有的工作,如获取,添加和删除项目从商店
@Injectable()
export class CartService {
@select() private cartData: ICartItem[] ;
constructor(private ngRedux: NgRedux<IAppState>) { }
getItems() {
return this.cartData;
}
addItem(item: IItem) {
this.ngRedux.dispatch({type: ADD_CART_ITEM, cartItem : item});
}
removeItem(itemId: string) {
this.ngRedux.dispatch({type: REMOVE_CART_ITEM, id: itemId});
}
removeAllItems() {
this.ngRedux.dispatch({type: REMOVE_ALL_CART_ITEMS});
}
}但问题是-当我在组件的初始化上使用getItems初始化myCartData属性时,稍后我可以添加或删除一些项,但myCartData属性不会在所有这些之后更新。
那么,如何使用这种服务从商店获取最新状态呢?或者这种方法很糟糕,我需要在没有任何自定义服务的情况下直接从存储中获取状态?
发布于 2018-03-26 05:47:29
试试这个:
@Injectable()
export class CartService {
@select('cartData') cartData$: Observable<ICartItem[]> ;
constructor(private ngRedux: NgRedux<IAppState>) { }
addItem(item: IItem) {
this.ngRedux.dispatch({type: ADD_CART_ITEM, cartItem : item});
}
removeItem(itemId: string) {
this.ngRedux.dispatch({type: REMOVE_CART_ITEM, id: itemId});
}
removeAllItems() {
this.ngRedux.dispatch({type: REMOVE_ALL_CART_ITEMS});
}
}在组件文件中,只需订阅cardService.cardData$,或使用模板中的异步管道即可。
https://stackoverflow.com/questions/49479347
复制相似问题