我有一个 Angular 7 自定义组件,它在ngOnInit
方法中有这样的后端请求
ngOnInit() {
this.elementsRequest$ = this.service.getElements();
this.elementsRequest$.subscribe((list: any[]) => {
this.list = list; // list from remote. This is going to be used on writeValue
});
}
该组件实现ControlValueAccessor
接口。在writeValue
我有:
writeValue(value: ItemCode[]) {
if (isNullOrUndefined(this.list)) {
this.elementsRequest$.subscribe((list: any[]) => {
this.value = value;
});
} else {
this.value = value;
}
}
writeValue
自定义组件的方法必须等待list
结果初始化ngOnInit
,因为父组件提供的值必须是结果列表之一。
[undefined, null, "a value"]
在结果列表到达之前,父组件正在使用值初始化此组件。
"a value"
期望的行为是将来自 parent ( )的最后传递的值保留为值
问题是:
- 如何避免三订阅
this.elementsRequest$
? - 如果必须订阅,如何确保自定义组件保持提供的最后一个值?