2017-01-15 3 views
2

Я использую Angular 2, и я использую некоторые геттеры и сеттеры для связи между компонентами. Я сталкиваюсь с проблемами, когда функции getter и setter запускаются много раз, даже если они ничем не зависят. Я делаю что-то неправильно?Angular 2 @Input get называется много

для функции геттера Я просто этот код:

private get SomeData(): string { 
     console.log("Getter called"); 
     return "some string"; 
} 

код сеттер:

@Input() 
public set SomeData(newData: string) { 
    console.log("Setter called"); 
} 

Связывание является:

<child-comp [SomeData]="SomeData"></child-comp> 

Консоль показывает Getter называется , Вызывается Setter, после чего он печатает около 20 линий, называемых Getter. Почему они называются?

+0

Также это относится к большинству/всем ситуациям. Этот отрыв - простой пример, привязка к локальной переменной в сеттере также показывает то же поведение. – Politiepet

ответ

3

Проблема вызвана

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; 
} 

, то один и тот же экземпляр строки будет возвращаться каждый раз, Угловая распознает его как неизмененный, и сеттер не будет вызываться, если someData не имеет chan ВГО.

+0

Но сеттер вызывается только один раз в моем примере, поэтому это не изменит того факта, что получатель получает вызов. Должен ли я избегать сложной логики в геттерах вообще? – Politiepet

+0

Вы определенно должны избегать сложных лигических в геттерах и методах, связанных с представлением. –

+0

Я делаю то же самое, что и ваш второй пример с логическим значением, объявленным, а затем возвращаемым получателем. Он называется постоянно. Хотите узнать, есть ли дополнительные проблемы, которые могут заставить геттер отключить обнаружение изменений? – Winnemucca

Смежные вопросы