Обнаружение изменения локальной переменной Angular

У меня есть родительский элемент, который хранит переменную value и передает эту переменную с двусторонней привязкой данных к дочернему компоненту. Как родитель может узнавать о любых изменениях этой переменной?

@Component({
  selector: 'parent-control',
  templateUrl: './parent.component.html',
  styleUrls: ['./parent.component.scss']
})
export class Parent Component{
   value: string
}

и в родительском html

<child-input-1-component [(value)]="value"></child-input-1-component>

Дочерний компонент является входом, для простоты я помещаю только один, но в реальном приложении у меня есть несколько таких компонентов, которые необходимо динамически отображать с помощью ngSwitch.

Каждый раз, когда пользователь что-то вводит в любой из этих дочерних компонентов, мне нужно, чтобы родительский элемент вызвал функцию.

Я мог бы использовать @Output для каждого дочернего элемента, но это выглядит не очень элегантно, и, кроме того, значение обновляется в реальном времени на родительском элементе, мне просто нужно знать, когда.

Есть ли в angular что-то вроде «наблюдателя», который проверяет изменения значений?


person Frapetim    schedule 05.11.2018    source источник
comment
Я мог бы использовать @Output для каждого ребенка: вы уже используете. Вот как работает двусторонняя привязка данных. [(value)]="value" - это просто сокращенное обозначение для [value]="value" (valueChange)="value = $event". Так что просто добавьте туда свой вызов функции.   -  person JB Nizet    schedule 05.11.2018
comment
Так я могу использовать его для этой цели? значение родительского элемента обновляется правильно, но мне также нужно вызвать функцию i, когда это произойдет.   -  person Frapetim    schedule 05.11.2018
comment
Да, для этого нужны выходы: уведомить родителя о событии от дочернего элемента и позволить родителю делать то, что ему нужно, когда это событие происходит.   -  person JB Nizet    schedule 05.11.2018
comment
Спасибо за ответ, я новичок в angular и не знаю, как это реализовать. Не могли бы вы предоставить мне пример кода?   -  person Frapetim    schedule 05.11.2018
comment
Спасибо, я очень ценю вашу помощь, теперь все работает нормально.   -  person Frapetim    schedule 05.11.2018


Ответы (1)


[()] - это языковой сахар, [(что)] = [что] + (whatChange)

person junk    schedule 05.11.2018