首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从angular-redux store获取最新状态

从angular-redux store获取最新状态
EN

Stack Overflow用户
提问于 2018-03-26 02:26:27
回答 1查看 865关注 0票数 2

我创建了自己的商店

代码语言:javascript
复制
export interface IAppState {
    cartData:ICartItem[];

    lastUpdate:Date;
}

并添加一些reducer来处理添加和删除操作

但在很多地方,我只需要商店里的最新数据。根据文档,将attr @select()添加到存储项中就足够了,添加您将获得当前状态。

但我已经创建了一些服务,它将做所有的工作,如获取,添加和删除项目从商店

代码语言:javascript
复制
@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属性不会在所有这些之后更新。

那么,如何使用这种服务从商店获取最新状态呢?或者这种方法很糟糕,我需要在没有任何自定义服务的情况下直接从存储中获取状态?

EN

回答 1

Stack Overflow用户

发布于 2018-03-26 05:47:29

试试这个:

代码语言:javascript
复制
@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$,或使用模板中的异步管道即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49479347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档