方法一:
您可以使用@Output 从子组件(InnerComponent)调用父组件函数(OuterComponent)。
外部组件 HTML:
<MiddleComponent (updateOuterComponent)="parentFunction($event)" />
外部组件 TS:
export class OuterComponent implements OnInit {
constructor() {}
ngOnInit() {}
parentFunction(para) {
console.log(para);
// operations you want to do in parent component
}
}
中间件 HTML:
<InnerComponent (updateMiddleComponent)="middleFunction($event)" />
中间组件 TS:
export class MiddleComponent implements OnInit {
@Output() updateOuterComponent = new EventEmitter();
constructor() {}
ngOnInit() {}
middleFunction(para) {
this.updateOuterComponent.emit(para);
}
}
内部组件 HTML:
想写什么就写什么
内部组件 TS:
export class InnerComponent implements OnInit {
@Output() updateMiddleComponent = new EventEmitter();
constructor() {}
ngOnInit() {}
updateMiddleAndParent(para) {
this.updateMiddleComponent.emit(para);
}
}
一旦您使用发射器从内部组件调用updateMiddleAndParent 函数,就会触发MiddleComponent 中的middleFunction。触发middleFunction后,同样middleFunction会在emitter的帮助下触发parentFunction。
方法二:
您需要创建一个服务并使用它来调用父函数:
数据服务:
import {BehaviorSubject} from "rxjs/BehaviorSubject"
export class DataService {
private state$ = new BehaviorSubject<any>('initialState');
changeState(myChange) {
this.state$.next(myChange);
}
getState() {
return this.state$.asObservable();
}
}
在 InnerComponent 和 OuterComponent 中调用 DataService:
在 OuterComponent 调用 DataService 并调用 getState() 时,这将返回一个 observable,只要值发生变化,您就可以使用在 observable 响应中传递的数据进行任何函数。
在 InnerComponent 调用 DataService 并使用changeState() 更改值。
一旦在 DataService 中更改了值,那么在父组件中,值将随着您订阅 observable 而更改,您将从那里获取更新的数据,您可以调用父组件中的任何函数。