2

我的 Angular2 应用程序中有几个模块,它们提供服务和配置。

现在我想包括@ngrx/store从我的模块中收集可用减速器的。


这是引导代码:

import {OpaqueToken} from 'angular2/core'
import {provideStore} from '@ngrx/store'

export const REDUCER_TOKEN = new OpaqueToken('Reducer');

bootstrap(AppComponent, [
    provide(REDUCER_TOKEN, { useClass: Module1Reducers, multi: true }),
    provide(REDUCER_TOKEN, { useClass: Module2Reducers, multi: true }),
    // old code: provideStore({module1, module2}, {module1:{}, module2:[]})
    provideStore(/* INSERT CODE HERE */)
]);

INSERT CODE HERE注释应该被替换为使用所有提供者的东西REDUCER_TOKEN

我怎样才能做到这一点?

4

1 回答 1

1

我看不到provideStore()直接将其传递给的方法。

provideStore创建并返回一个提供者数组。我的尝试是首先添加提供者provideStore()创建,然后在第二步中覆盖REDUCER依赖于REDUCER_TOKEN

bootstrap(AppComponent, [
    provide(REDUCER_TOKEN, { useClass: Module1Reducers, multi: true }),
    provide(REDUCER_TOKEN, { useClass: Module2Reducers, multi: true }),
    // add generated providers
    provideStore(),
    // override `REDUCER` provider
    provide(REDUCER, {
      deps: [REDUCER_TOKEN],
      useFactory(reducer){
        if(typeof reducer === 'function'){
          return reducer;
        }

        return combineReducers({
            "foo":reducer[0].reducerFunction, 
            "bar":reducer[1].reducerFunction
        });
      }
    }),
]);

如果为同一个令牌(或类型)添加了多个提供程序,没有multi: true,则只有最后添加的一个生效。

根据此provideStore()实现构建https://github.com/ngrx/store/blob/master/src/ng2.ts#L56

-- 未测试 --

于 2016-03-31T09:30:29.897 回答