仅在父组件中的功能完成后才调用子组件中的功能

Call function in child component only after function in parent component is completed

我有一个只需要调用一次的 HTTP 函数,所有子组件都依赖于这个函数。所以我从父组件调用这个函数。

现在,在对任何子组件的 ngOnInit 进行任何调用之前,我需要检查父函数是否成功执行,否则等到父函数从 http 调用(服务器)获得响应:

  • Parent Component
    • Child Component 1
    • Child Component 2
    • Child Component 3

调用服务函数的父组件
子组件必须等到父函数执行

父组件

main(): void {
    this.backendService.main().subscribe(res => {
        this.sharedDataService.setParentData(res);
        this.data = res;
    });
}

ngOnInit(): void {
    this.main();
}

子组件

child(): void {
    let parentData = this.sharedDataService.getParentData();
    this.backendService.child(parentData).subscribe(res => this.childData = res);
}

ngOnInit(): void {
    this.child();
}

backendService - 进行 http 调用
sharedDataService - 具有在所有组件之间共享的数据

但是 this.backendService.child 函数甚至在 this.backendService.main 函数 http 调用收到响应之前就被调用了。有什么办法可以实现吗?

因为你使用的是共享服务,所以如果你使用 observable 会更好,你所有的问题都解决了:

// Parent component:

main(): void {
    this.backendService.main().subscribe(res => {
        this.sharedDataService.setParentData(res);
        this.data = res;
    });
}

// Child components:

ngOnInit(): void {
    this.sharedDataService.getParentData().subscribe(parentData => {
        this.backendService.child(parentData).subscribe(res => this.childData = res);
    });
}   

// Your shared service:

export class SharedDataService {

    private parentData: BehaviorSubject<any> = new BehaviorSubject({});    

    setParentData(data): void {
        this.parentData.next(data);
    }
    getParentData(): Observable<any> {
        return this.parentData.asObservable();
    }
}

例如您可以使用事件发射器 https://toddmotto.com/component-events-event-emitter-output-angular-2

使用发射器,您可以发出事件并将任何类型的数据传递给任何其他组件。