В angular2 я хочу запускать валидаторы для некоторых элементов управления при изменении другого элемента управления. Есть ли способ просто указать форме на повторную проверку? Еще лучше, могу ли я запросить проверку определенных полей?
Пример: задан флажок X и вход P. На входе P есть валидатор, который ведет себя по-разному в зависимости от значения модели X. Когда X отмечен / не отмечен, мне нужно вызвать валидатор на P. Валидатор на P будет смотреть на модель, чтобы определяет состояние X и соответственно проверяет P.
Вот код:
constructor(builder: FormBuilder) {
this.formData = { num: '', checkbox: false };
this.formGp = builder.group({
numberFld: [this.formData.num, myValidators.numericRange],
checkboxFld: [this.formData.checkbox],
});
}
this.formGp.controls['checkboxFld'].valueChanges.observer({
next: (value) => {
// I want to be able to do something like the following line:
this.formGp.controls['numberFld'].validator(this.formGp.controls['numberFld']);
}
});
У кого-нибудь есть решение? Благодаря!
forms
validation
angular
Bonneville
источник
источник
Ответы:
Я не знаю, ищете ли вы все еще ответ, поэтому вот мои предложения:
Посмотри на это: Angular 2 - AbstractControl
Я думаю, что вы могли бы сделать следующее:
Это должно вызвать и запустить валидаторы. Кроме того, обновляется и состояние. Теперь у вас должна быть возможность проверить значение флажка в логике валидатора.
Надеюсь это поможет!
РЕДАКТИРОВАТЬ: обновленная ссылка и пример. Код изменился, пока я писал свой ответ.
EDIT_2: alpha.48 изменяет EventEmitter.observer на EventEmitter.subscribe!
EDIT_3: изменена ссылка на фактическую реализацию, добавлена ссылка на документы
Валидатон-Гид
Документация FormControl
источник
с моей ControlGroup я делаю это, потому что у меня есть ошибки, проверяющие div при прикосновении
(this.form - моя контрольная группа)
источник
С помощью этого блога
ссылка на блог
Я нашел решение с комбинацией ответа Nightking
источник
Это помогло мне
источник
Есть более элегантные способы моделирования этого поведения - например, помещение вашего состояния в ReplaySubject и наблюдение за ним, а затем использование асинхронных валидаторов, наблюдающих за состоянием, - но псевдокодированный подход ниже должен работать. Вы просто наблюдаете за изменениями значений в флажке, обновляете модель соответствующим образом, а затем вызываете повторную проверку numberFld с помощью cal updateValueAndValidity.
источник
источник