我有两个组件Parent Component和Child component,我有一个发生在Parent component中的API,响应值被传递给child component。目前我正在使用ngOnChanges,但我想知道如何使用Setters。
假设我在ParentComponent中有以下代码:
<ChildComponent [apiResponse]="res" />在ChildComponent中,我有以下内容:
@Input() apiResponse: any;
ngOnChanges(changes: SimpleChanges) {
    console.log(this.apiResponse)
}每次更改apiResponse时,ngOnChanges函数都会触发并在控制台中打印该值。
如果我想要达到这个效果,但要使用if Setters。与其他场景一样,我可能有多个输入,我不希望每次输入的值发生变化时都会触发ngOnChanges。
发布于 2020-10-31 09:41:55
而不是:
@Input() apiResponse: any;使用:
@Input() 
get apiResponse(): any {return this._apiResponse;}
set apiResponse(value: any) {
  this._apiResponse = value;
  console.log(value);
  // do whatever else you want to do here
}
private _apiResponse: any;在上面的代码中,唯一真正需要的部分是setter函数。否则,你就不能通过@Input()从父组件中传入值,剩下的就是你想要的值了。例如,如果你想保存这个值以便以后使用,你需要私有成员(或者BehaviorSubject或者任何你认为可以用来存储值的东西):
@Input() 
set apiResponse(value: any) {
  this._apiResponse$.next(value);
  console.log(value);
  // do whatever else you want to do here
}
_apiResponse$: BehaviorSubject<any> = new BehaviorSubject<any>(null);在上面的示例中,请注意我没有将主题设置为私有成员。我假设您想在模板中使用它,所以,即使它应该是私有的(不是组件API的一部分),我也不能这样做,因为模板需要访问它。下划线是angular中的约定,表示公共成员不是API的一部分。
https://stackoverflow.com/questions/64617489
复制相似问题