В моем Plunk У меня есть родительский компонент с двумя кнопками и одним полем ввода. Первая кнопка устанавливает флаг для отображения дочернего компонента, который получит группу форм родительского элемента. Он добавляет другое поле ввода в эту группу форм с «необходимой» проверкой.Обнаружение изменений и материал 2
Вторая кнопка настроена быть «отключено», если используемая форма группа не действует:
<form [formGroup]="formGroup">
<input type="text" [formControl]="formGroup.get('nameParent')" />
<child *ngIf="show===true" [inputform]="formGroup"></child>
<button (click)="addChild()">Add child</button>
<button [disabled]="!formGroup.valid" md-raised-button>Valid</button>
</form>
Вторая кнопка имеет директиву мкр-фальш-кнопка, которая превращает его в кнопку материала. Если вы введете что-то в поле ввода, поднятая кнопка включится. Если нажать на кнопку «Добавить ребенка» после вы набрали что-то вы получите сообщение об ошибке в консоли:
Ошибка в app.component.html: 4: 14 вызвано следующими причинами: Expression изменилось после его был проверен. Предыдущее значение: «false». Текущее значение: «true».
Но подождите: Если теперь удалить мкр-рейзом кнопку с кнопки, чтобы использовать его в качестве родного контроля, тот же самый эксперимент будет успешным без сообщение об ошибке. Ergo: Компонент материального дизайна, похоже, делает что-то, что заставляет это произойти. Любые идеи:
- Почему это происходит?
- Как я мог избавиться от этой ошибки?
Круто! И любая идея, почему она работала без кнопки md-raise? :) И не должно ли событие мыши уже не запускать обнаружение изменений? – David
Вероятно, md-raise запускает что-то внутренне на основе свойства disabled. Это и вызвало этот цикл. И да, событие мыши запускает обнаружение изменений, но внутри этого произошло другое изменение. Это сложная вещь, которую мне иногда приходится тяжело обнимать вокруг себя – PierreDuc