从angular-redux商店获取最新状态

时间:2018-03-25 18:26:27

标签: javascript angular redux angular5 angular-redux

我创建自己的商店

export interface IAppState {
    cartData:ICartItem[];

    lastUpdate:Date;
}

并添加一些reducer来处理ADD和REMOVE操作

但在很多地方我只需要商店的最新数据。根据文档,将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});
    }
}

但是问题 - 当我在我的组件的init上使用myCartData初始化getItems属性时,稍后我可以添加或删除某个项目,但myCartData属性在所有这些之后都不会更新

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

1 个答案:

答案 0 :(得分:1)

试试这个:

@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$,或在模板中使用异步管道。

相关问题