Я написал директиву пользовательские проверки так:Angular2 валидатора не называется
const DURATION_VALIDATOR = new Provider(
NG_VALIDATORS,
{useExisting: forwardRef(() => DurationDirective), multi: true}
);
@Directive({
selector: '[ngModel][duration], [formControl][duration]',
providers: [{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => DurationDirective),
multi: true }]
})
export class DurationDirective implements Validator{
constructor(public model:NgModel){
console.error('init')
}
validate(c:FormControl) {
console.error('validate')
return {'err...':'err...'};
}
}
Мой Html выглядит следующим образом:
<input
type="text"
[(ngModel)]="preparation.duration"
duration
required
>
Моя проблема заключается в том, что в то время как валидатор инициализируется, то есть ' init 'записывается в консоль, функция validate никогда не вызывается, то есть «validate» никогда не регистрируется на консоли при вводе в поле ввода. Поскольку инициализируется валидатор, я предполагаю, что я «правильно подключил» все. Так чего же не хватает?
Я добавил свойство disableDeprecatedForms(), giveForms() к свойству поставщиков компонентов. Но это, похоже, не имеет никакого эффекта. Можете ли вы объяснить, почему? Вот мой обновленный plunk https://plnkr.co/edit/ztuBIZc3QMRwMg62scZR?p=preview – schacki
У этой панели еще нет двух вызовов для вызова в вызове bootstrap(). Перемещение двух вызовов, которые у вас есть в свойстве поставщика, в метод начальной загрузки, устраняет проблему. https://plnkr.co/edit/b2PipR?p=preview – batesiiic
Извините, что это было недоразумение. Я преднамеренно переместил вызовы обеспечения из метода начальной загрузки в компонент my-app, чтобы проиллюстрировать мой вопрос: мое предположение состояло в том, что добавление двух вызовов для поставщиков компонентов является достаточным. Можете ли вы объяснить, почему нет? – schacki