Angular 2 @Input得到了很多

时间:2017-01-15 20:30:21

标签: angular

我正在使用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调用行。为什么叫这些?

1 个答案:

答案 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。