我使用的是实体,而不是开始时没有空的实体,而是要在初始状态下添加默认项。我尝试了以下方法:
const id = uuidv4()
const zeroState = adapter.getInitialState({
activeTabId: id,
});
const homeTab = {
pageID: id,
pageTitle: 'Home',
} as PageInfo;
export const initialState = adapter.addOne(homeTab, zeroState);
它在开发环境中运行良好,并且ng build --prod=true
也可以正常运行。但是当我部署该应用程序时,它不会运行/加载任何内容,而是抛出Uncaught Error: Cannot enable prod mode after platform setup..
有人可以告诉我如何将项目添加到初始实体状态吗?
答案 0 :(得分:1)
不幸的是,adapter.addOne不能这么早地工作。但是还有其他选择。
您可以手动注入实体,实体的商店结构非常简单:
const id: any = uuidv4(); // any because of type cast.
const zeroState = adapter.getInitialState({
activeTabId: id,
});
export const initialState = {
...zeroState,
ids: [
...zeroState.ids,
id,
],
entities: {
...zeroState.entities,
[id]: {
pageID: id,
pageTitle: 'Home',
},
},
};
或者您可以为此使用效果,它可以在生产模式下工作。
@Injectable()
export class EntitiesEffects {
@Effect()
public readonly data$ = this.actions$.pipe(
ofType(ROOT_EFFECTS_INIT),
switchMapTo(
merge(
of(
new UpsertAddress({
address: {
id: 'address1',
name: 'Address 1',
},
}),
// more entities
new UpsertUser({
user: {
id: 'user5',
name: 'User 5',
companyId: 'company3',
},
}),
new UpsertUser({
user: {
id: 'user6',
name: 'User 6',
companyId: 'company3',
managerId: 'user5',
},
}),
),
),
),
);
constructor(protected readonly actions$: Actions) {}
}
然后在AppModule中
@NgModule({
imports: [
EffectsModule.forRoot([EntitiesEffects]),
],
})
export class AppModule {}
答案 1 :(得分:0)
使用适配器的setAll
方法:
const initialState = adapter.setAll([homeTab], zeroState);
(其中homeTab
是实体,zeroState
是adapter.getInitialState
的返回值)