Шаблон родительского компонента:
<my-component [param]="whatever"></my-component>
Код родительского компонента:
whatever = { value1: 0, value2: 1, value3: 'foo' };
Код дочернего компонента:
@Input() public param: any;
ngOnChanges() {
console.log('Received input: ', param);
}
Это не работает.Любое изменение в whatever
будет незаметно для дочернего компонента и ngOnChanges
не сработает.
Это также не сработает, если я попытаюсь использовать установщик:
@Input() set param(value) {
console.log(value);
}
И это не поможет, если я попытаюсь запустить ручное обновление зоны в родительском компоненте.
Очевидно, @Input()
может обнаруживать только изменение структуры объекта, но не его значений.
Итак, как я могу передать объект как свойство @Input()
и сделать так, чтобы дочерний компонент обнаруживал изменения значений?