我有一个 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$? - 如果必须订阅,如何确保自定义组件保持提供的最后一个值?