【发布时间】:2021-01-15 02:30:05
【问题描述】:
我有一个定义了工厂的对话框模块:
@NgModule({
declarations: [...components, ...directives],
imports: [...modules],
providers: [
CustomBlockService,
{
provide: DocumentCustomBlock,
useFactory: (httpClient: HttpClient, customBlockService: CustomBlockService) => {
console.log(customBlockService.type);
switch (customBlockService.type) {
case 'doc_num_date_block':
return new DocNumDateBlock(
httpClient,
customBlockService,
new DocNumDateBlockFormGroup(createFormControls(customBlockService.value)),
);
case 'find_unom_by_address_block':
return new FindUnomAddressBlock(
httpClient,
customBlockService,
new FindUnomAddressBlockFormGroup(createFormControls(customBlockService.value)),
);
default:
throw 'Error type custom block!';
}
},
deps: [HttpClient, CustomBlockService],
},
],
entryComponents: [...components],
})
export class DialogLoadDocumentModule {}
对话框的这个模块从父组件中抽出,在窗口打开之前,选定的块被添加到CustomBlockService服务中:
public setDocument(): void {
this.customBlockService.block = this.block;
}
第一次工作时,我在对话框中看到DocumentCustomBlock 提供程序中的选定数据this.customBlockService.block = this.block;。
当窗口关闭并使用新的this.customBlockService.block = this.block; 重新打开时,我会在服务中看到旧数据。
那么,如果要做控制台:
useFactory: (httpClient: HttpClient, customBlockService: CustomBlockService) => {
console.log(customBlockService.type);
});
我注意到控制台仅在第一次工作,然后不工作,尽管 CustomBlockService 中的属性已更改。
我已经尝试添加这个:
{ provide: CustomBlockService, useClass: CustomBlockService },
每次加载模块时在同一个模块中创建一个新实例CustomBlockService。但是没有成功。
【问题讨论】:
标签: angular