Angular 2 ngrx:多个 reducer 与一个 http 请求?

Angular 2 ngrx : multiple reducer with one http request?

在我的 Angular 2 应用程序中,我正在尝试实施 ngrx,所以我的组件之一中有以下代码:

OnInit() {
 this.myService.getApplicationList();
}

那个服务 return 这个 json :

{
 Count : 25, // count of all applications
 Applications[Array] // array with applications objects in it
 Categories[Array] // array of categories
}

如何在仅发出一个请求的情况下将计数、应用程序和类别分配给各自的减速器?

我现在正在做的是将响应对象映射到 response.json()。然后是应用程序。

Myservice.ts

 getApplicationList(limit: number) {
    return this.http.get(this.baseUrl)
    .map(res => res.json().Applications )
    .map(payload => ({ type: 'GET_APP', payload : payload }))
    .subscribe(action => {
        this.store.dispatch(action)});
}

为了获取类别,我正在执行与之前相同的请求:

    getApplicationList(limit: number) {
    return this.http.get(this.baseUrl)
    .map(res => res.json().Categories)
    .map(payload => ({ type: 'GET_CATEGORIES', payload : payload }))
    .subscribe(action => {
        this.store.dispatch(action)});
}

我如何简化这种重复并仅使用一个 http 请求来映射我的 Applicaitons 和 Categories 数组?

您可以在订阅功能中同时处理。

getApplicationList(limit: number) {
    return this.http.get(this.baseUrl)
    .map(res => res.json())
    .subscribe(res => {
        this.store.dispatch({ type: 'GET_CATEGORIES', payload : res.Categories });
        this.store.dispatch({ type: 'GET_APP', payload : res.Applications });
    });
}

我认为更正确的方法是使用 ngrx @Effect (https://github.com/ngrx/effects);

  • 使用两个属性设置名为 AppState 的状态;类别和应用。
  • 创建一个类似 'LOAD_APP' 的动作,效果应该监听该动作,一旦触发,将触发 http 请求,然后派发一个名为 LOAD_APP_SUCCESS 的动作,并以有效负载作为响应,然后存储然后将负载分别存储在 Store AppState 道具中。