Angular2提供程序依赖于其他提供程序

时间:2016-03-27 21:08:27

标签: angular angular2-services angular-providers

我的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个提供商的内容。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我没有办法直接将其传递给provideStore()

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

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实施https://github.com/ngrx/store/blob/master/src/ng2.ts#L56

构建

- 未经测试 -