我写了这样的自定义验证指令:
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”记录到控制台中。由于验证器已初始化,因此我假设我正确地“连接”了所有东西。那么,缺少了什么呢?
我最好的选择是,您还没有在表单方面引导过Angular:
import { App } from './app';
import { disableDeprecatedForms, provideForms } from '@angular/forms';
bootstrap(App, [
// these are crucial
disableDeprecatedForms(),
provideForms()
]);
你可以看到这个普拉克-它输出"validate"
到控制台。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句