我正在使用Angular 2,并且正在使用一些getter和setter在组件之间进行通信。我遇到了很多问题,尽管它们不依赖任何东西,但它们经常运行getter和setter函数。难道我做错了什么?
对于getter函数,我只有以下代码:
private get SomeData(): string { console.log("Getter called"); return "some string"; }
设置器代码为:
@Input() public set SomeData(newData: string) { console.log("Setter called"); }
绑定是:
控制台显示调用了Getter的方法,调用了Setter的方法,然后显示了20条Getter的方法。为什么叫这些?
问题是由
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 。