Angular6等待app.component中的ngOnInit完成,然后在子触发器中等待ngOnInit

时间:2019-05-17 09:40:48

标签: angular

在我的项目中,我想在app.component初始化期间调用一个api,子组件应该等到app.comonent在ngOnInit()中完成

在app.component.ts中:

ngOnInit() {
// call getx()
     }

在child.component.ts中:

ngOnInit(){
   // call gety()
  }

执行顺序: 希望gety()等到getx()完成。

2 个答案:

答案 0 :(得分:0)

也许您可以尝试Promise之类的东西:

在app.component.ts

async ngOnInit(): Promise<bool> {

return new Promise<bool>(resolve,reject)=>{
  // call getx()
resolve(true); //or anything you want ot return maybe from getx()
});
}

在child.component.ts中。extends您的app.component

async ngOnInit(): Promise<bool>{

   await super.NgOnInit();
 // call gety()
   resolve(true); //or anything you want ot return maybe from gety()
});
}

希望它可以帮助您..也许您还可以通过其他方式对其进行存档(例如从app.component.ts中进行发射,然后在子组件中进行监听。.或其他)..希望它可以对您有所帮助! !!

答案 1 :(得分:0)

在您的应用程序组件中,您可以拥有一个属性:

wasGetXExecuted = false;

在执行getX()函数后将其设置为true。

您可以在子组件中创建输入,例如:

@Input() wasGetXExecuted: boolean;

然后在子组件中,您可以实现ngOnChanges生命周期挂钩,例如:

ngOnChanges(changes: SimpleChanges) {
    if (changes['wasGetXExecuted'] != null) {
        if (changes['wasGetXExecuted'].previousValue === false &&
            changes['wasGetXExecuted'].currentValue === true) {
            this.getY();
        }
    }
}

您还需要在应用程序组件模板中绑定输入:

<child-component [wasGetXExecuted]="wasGetXExecuted"></child-component>