仅在父组件中的功能完成后才调用子组件中的功能
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
使用发射器,您可以发出事件并将任何类型的数据传递给任何其他组件。
我有一个只需要调用一次的 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
使用发射器,您可以发出事件并将任何类型的数据传递给任何其他组件。