У меня есть два угловых модуля: main и feature:
Основной/корневой модуль:
@NgModule({
imports: [
StoreModule.forRoot({router: routerReducer}),
EffectsModule.forRoot([...]),
...
],
declarations: [],
...
})
export class AppModule {}
Функциональный модуль:
@NgModule({
imports: [
StoreModule.forFeature('feature', {someValue: someValueReducer}),
EffectsModule.forFeature([...]),
...
],
declarations: [],
...
})
export class FeatureModule {}
Мне нужно получить доступ к фрагменту данных "feature" в основном модуле, чтобы условно отобразить/активировать вкладку приложения на основе данных, хранящихся в feature
модуле.
(Другими словами, мне нужна глобальная/общая часть состояния, доступная всем модулям main и любому модулю feature.)
- Возможно ли это сделать?
- Считается ли это хорошей практикой?
В настоящее время я не могу этого сделать, так как в основном AppState
нет состояния feature
:
export interface AppState {
router: RouterReducerState<RouterStateUrl>;
}
А машинопись указывает на ошибку this.store.select('feature')
, так как нет ключа feature
основного хранилища AppState
.
Используя selector
: this.store.select(selectFeatureValue)
я получаю ошибку времени выполнения:
export const selectFeatureModule = createFeatureSelector<FeatureState>('feature');
export const selectFeatureValue = createSelector(selectFeatureModule ,
(state: FeatureState) => state.someValue);
Я получаю сообщение об ошибке в основном AppComponent:
TypeError: Невозможно прочитать свойство «someValue» неопределенного
setTimeout(() => this.store.select(selectFeatureValue) .subscribe(console.log.bind(console)), 1000);
избавит от ошибки времени выполнения, но я бы предпочел избавиться отsetTimeout
- person Felix   schedule 31.10.2017