Как мне следует условно требовать поля формы? Я сделал специальный валидатор, но условные переменные, которые я передаю в пользовательский валидатор, являются статическими и остаются их начальными значениями. Каким должен быть мой пользовательский валидатор для получения обновленных условных значений? Возможно, есть способ сделать это с помощью Validators.required
вместо пользовательского валидатора?Угловые 2 условные валидаторы.
private foo: boolean = false;
private bar: boolean = true;
constructor(private _fb: FormBuilder) {
function conditionalRequired(...conditions: boolean[]) {
return (control: Control): { [s: string]: boolean } => {
let required: boolean = true;
for (var i = 0; i < conditions.length; i++) {
if (conditions[i] === false) {
required = false;
}
}
if (required && !control.value) {
return { required: true }
}
}
}
this.applyForm = _fb.group({
'firstName': ['', Validators.compose([
conditionalRequired(this.foo, !this.bar)
])],
...
});
}
Update (17 мая 2016)
Прошло много времени с тех пор отправляю это, но я хотел бы сослаться на .include()
и .exclude()
методы, доступные на ControlGroup
класс для тех, кто там который пытается создать эту функциональность. (docs) Несмотря на то, что существуют, вероятно, варианты использования условного валидатора, как указано выше, я обнаружил, что включение и исключение элементов управления, групп управления и массивов управления - отличный способ справиться с этим. Просто установите валидатор required
на элемент управления, который вы хотите, и включите/исключите его, как вам будет угодно. Надеюсь, это поможет кому-то!
выглядит хорошо для меня ;-) –
Но когда я изменяю 'Foo' к подлинному в другом месте, валидатор все еще показывает 'foo' как false. Выбрасывание 'console.log (условия)' в валидаторе возвращает '[false, false]', когда я знаю, что 'foo' действительно истинно. Мне нужно получить '[true, false]'. Я предполагаю, что это потому, что условия задаются один раз, потому что они находятся внутри конструктора. Любой способ обойти это поведение? –
Ошибка связи с документами в обновлении – surfbird0713