我正在使用Angular 2,并且我使用了一些getter和setter来在组件之间进行通信。我遇到了getter和setter函数运行很多次的问题,即使它们不依赖于任何东西。我做错了吗?
对于getter函数我只有这段代码:
private get SomeData(): string {
console.log("Getter called");
return "some string";
}
setter代码是:
@Input()
public set SomeData(newData: string) {
console.log("Setter called");
}
绑定是:
<child-comp [SomeData]="SomeData"></child-comp>
控制台显示Getter调用,Setter调用,然后打印出20个Getter调用行。为什么叫这些?
答案 0 :(得分:4)
问题是由
引起的private get SomeData(): string {
console.log("Getter called");
return "some string";
}
因为每当更改检测检查值是否已更改时,它都会返回一个新的字符串实例
如果您将代码更改为
private someData:string = "some string";
private get SomeData(): string {
console.log("Getter called");
return this.someData;
}
然后每次返回相同的字符串实例,Angular将其识别为未更改,并且除非someData
已更改,否则不会调用setter。