验证现有功能状态已添加到 NGRX 商店中
Verify existing feature state is added in NGRX Store
下面是我目前在应用程序中面临的示例:
app.module.ts
@NgModule({
...
imports: [StoreModule.forRoot(reducers)],
...
})
export class AppModule {}
商店
users: {...}
articles.module.ts
@NgModule({
...
imports: [StoreModule.forFeature('articles', reducers)],
...
})
export class ArticlesModule {}
用户导航到 /articles
,然后 articles
状态切片将添加到商店
商店
users: {...},
articles: {...}
现在,假设最初,商店只有 users
,在一个组件(属于用户模块)中,我使用的是 selector
,我遇到的问题是,我需要在选择器中知道 articles
切片是否已添加到商店中,但我无法使用任何 articles
选择器,因为我收到此错误
Cannot access 'selectArticles' before initialization....`
有没有办法询问商店是否包含加载的某个切片?
正如您所注意到的,只有在 .forFeature
模块加载后,您才能在存储数据上使用选择器。
要解决这个问题,您应该在使用选择器之前更早地加载商店。
一个好的模式是为您的商店创建一个单独的模块并将其从 app.modules
我建议您也添加一个 app.store 模块。随着代码的增长,您将不得不添加更多的商店模块。
新 app.store.模块:
@NgModule({
imports: [
StoreModule.forRoot(reducers),
...
ArticleStoreModule
],
})
export class AppStoreModule {}
新 article.store.module:
@NgModule({
imports: [
StoreModule.forFeature('articles', reducers)),
...
],
})
export class ArticleStoreModule {}
然后将新 AppStoreModule
导入 app.module
下面是我目前在应用程序中面临的示例:
app.module.ts
@NgModule({
...
imports: [StoreModule.forRoot(reducers)],
...
})
export class AppModule {}
商店
users: {...}
articles.module.ts
@NgModule({
...
imports: [StoreModule.forFeature('articles', reducers)],
...
})
export class ArticlesModule {}
用户导航到 /articles
,然后 articles
状态切片将添加到商店
商店
users: {...},
articles: {...}
现在,假设最初,商店只有 users
,在一个组件(属于用户模块)中,我使用的是 selector
,我遇到的问题是,我需要在选择器中知道 articles
切片是否已添加到商店中,但我无法使用任何 articles
选择器,因为我收到此错误
Cannot access 'selectArticles' before initialization....`
有没有办法询问商店是否包含加载的某个切片?
正如您所注意到的,只有在 .forFeature
模块加载后,您才能在存储数据上使用选择器。
要解决这个问题,您应该在使用选择器之前更早地加载商店。 一个好的模式是为您的商店创建一个单独的模块并将其从 app.modules
我建议您也添加一个 app.store 模块。随着代码的增长,您将不得不添加更多的商店模块。
新 app.store.模块:
@NgModule({
imports: [
StoreModule.forRoot(reducers),
...
ArticleStoreModule
],
})
export class AppStoreModule {}
新 article.store.module:
@NgModule({
imports: [
StoreModule.forFeature('articles', reducers)),
...
],
})
export class ArticleStoreModule {}
然后将新 AppStoreModule
导入 app.module