依赖于其他 Provider 的 Angular2 Provider
Angular2 Provider that depends on other Providers
我的 Angular2 应用程序中有几个提供服务和配置的模块。
现在我想包含 @ngrx/store
,它从我的模块中收集可用的 reducer。
这是 bootstrap 代码:
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
提供程序的内容。
我怎样才能做到这一点?
我没有找到直接将其传递给 provideStore()
的方法。
provideStore
创建并 returns 提供者数组。
我的尝试是首先添加 provideStore()
创建的提供者,然后在第二步中覆盖依赖于 REDUCER_TOKEN
:
的 REDUCER
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
-- 未测试 --
我的 Angular2 应用程序中有几个提供服务和配置的模块。
现在我想包含 @ngrx/store
,它从我的模块中收集可用的 reducer。
这是 bootstrap 代码:
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
提供程序的内容。
我怎样才能做到这一点?
我没有找到直接将其传递给 provideStore()
的方法。
provideStore
创建并 returns 提供者数组。
我的尝试是首先添加 provideStore()
创建的提供者,然后在第二步中覆盖依赖于 REDUCER_TOKEN
:
REDUCER
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
-- 未测试 --