#angular #forms
Вопрос:
Поэтому мне нужно обнаружить изменение статуса формы во время использования ChangeDetectionStrategy.OnPush . таким образом, проблема заключается в следующем: если я добавляю новый ввод в форму, и он пуст, и я удаляю его после формы.состояние по-прежнему показывает, что форма недействительна, даже если я удалил пустой ввод. И из-за этого кнопка сохранения по-прежнему отключена. Но когда я нажимаю любую другую форму ввода, статус меняется .
Я знаю, что это потому, что я изменил стратегию поиска.OnPush
, когда он установлен по умолчанию, он работает без проблем, Поэтому есть ли какой-либо другой способ исправить это, кроме как оставить измененное определение в настройках по умолчанию?
Ответ №1:
вы можете импортировать ChangeDetectorRef
в конструктор, например, следующее
constructor(private ref: ChangeDetectorRef) {
}
и не забудьте импортировать его вот так :
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
и после этого вы можете использовать метод detectChanges
, с помощью которого вы запускаете проверку состояния формы, как показано ниже :
this.ref.detectChanges();
Ответ №2:
при использовании changeDetectionStrategy.onPush
стратегии вы сказали angular прекратить выполнение цикла обнаружения изменений по умолчанию. поэтому после внесения изменений вы должны заставить angular запустить цикл обнаружения изменений.
@Component({…, changeDetection: Стратегия изменений.Онпуш })
у вас есть 2 способа сделать это. сначала импортируйте и объявите ChangeDetectorRef
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';
constructor(private cd: ChangeDetectorRef) {}
- повторите или продолжите цикл обнаружения угловых изменений в обычном режиме. это позволит проверить все изменения в дереве DOM компонентов.
this.cd.reattach();
- Цикл обнаружения изменений срабатывания вручную зависит от вашего желания. он проверит, что даже ни один объект не изменился.
this.cd.detectChanges();