1

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

0 回答 0