Я довольно новичок в Angular и пытаюсь создать некоторые повторно используемые компоненты , например, компонент ввода текста.Я хочу настроить его с помощью всевозможных встроенных методов, проверок, связанных меток и меток ошибок и т. Д.
Мне это в основном удалось. То, что я сейчас пытаюсь достичь , - это повторно отобразить родительский компонент (и все дочерние элементы неявно) при изменении свойства.
Я получаю обратный вызов срабатывает в родительском объекте и присваивает значение моему text свойству, но DOM не обновляется новым значением.
Родительский компонент
import { Component, Input } from '@angular/core';
@Component({
selector: 'parent',
template: '<input-text [text]="text" [onChange]="onChange"></input-text> <p>The text is now {{text}}</p>'
})
export class ParentComponent {
text: string;
onChange($text) {
this.text = $text;
console.log('onChange', this.text); // <-- it gets here on child input
}
}
Входной текст - дочерний компонент
import { Component, Input } from '@angular/core';
@Component({
selector: 'input-text',
template: '<input type="text" [(ngModel)]="text" (ngModelChange)="onChange($event)" [value]="text"/>',
})
export class InputTextComponent {
@Input() text: string;
@Input() onChange: Function;
}
Вот и все.Запись в дочерний компонент запускает родительскую функцию onChange
, я обновляю свойство text
, но шаблонное сообщение не изменяется.
Я в основном пытаюсь создать неуправляемый компонент, похожий на React.Кроме того, если я добавлю больше input-text
детей, они не будут использовать один и тот же текст, хотя свойство text
родителя является единичным и теоретически передается всем детям.
What I 'мы пробовали
Я также пытался использовать ngOnChanges
в дочернем компоненте , как упомянуто здесь , и использовать changeDetection
свойство , как упомянуто здесь но ни один не работал.Кажется, проблема в родителе. Я также пытался использовать @Input()
в родительском компоненте вместо свойства text.
Я почти уверен, что упускаю что-то простое, но не могу понять, что именно.Когда text
изменяется, я хочу видеть это в DOM, и если я использую 10 input-text
компонентов, которые передаются с тем же свойством text
, я ожидаю, что все они отображают это.