我有父母和孩子两个组成部分

父级正在解析构造函数中的promise,子级正在将promise的结果作为@Input()参数接收

除了afterViewCheck和afterContentCheck之外,孩子没有收到生活提示挂钩中的承诺结果,我想避免这些。

我还想避免共享服务在behaviorSubject或类似内容中包含共享数据

所以问题是,在以promise的结果作为输入参数构造模板之前,我可以等待promise吗?

上级:

// html: <app-chil [brands]="brands"></>

brands: Brand[] = []

constructor() {
  this.getBrands()
}

async getBrands() {
  this.brands = await new Promise<Brand[]>(resolve =>
    this.equipmentService.getBrands().subscribe(brands => resolve(brands)))
}


儿童:

@Input() brands: Brand[] = []

constructor() { }

ngAfterViewInit() {
  console.log(this.brands) // receive brands here
}

最佳答案

使用安装器,您无需使用任何生命周期挂钩及其清洁器。

brands: Brand[] = [];

constructor() {
   this.getBrands()
}

async getBrands() {
  this.brands = await new Promise<Brand[]>(resolve =>
    this.equipmentService.getBrands().subscribe(brands => resolve(brands)))
}


儿童:

private _brands: Brand[] = [];
@Input() set brands(data: Brand[]) {
    this._brands = data;
    console.log(data);
}

constructor() { }

10-05 20:48