我寫了一個自定義的驗證指令那樣:不叫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'被記錄到控制檯,驗證函數永遠不會被調用,即在輸入字段中輸入時,「驗證」從不記錄到控制檯。由於驗證程序已初始化,因此我假設我「正確」連接了所有內容。那麼缺少什麼?
我已將disableDeprecatedForms(),provideForms()添加到我的組件提供程序屬性中。但這似乎沒有任何影響。你能解釋爲什麼嗎?這是我更新的plunk https://plnkr.co/edit/ztuBIZc3QMRwMg62scZR?p=preview – schacki
這個plunk仍然沒有在bootstrap()調用中提供兩個調用。將您在提供者屬性中的兩個調用移動到引導方法可以解決問題。 https://plnkr.co/edit/b2PipR?p=preview – batesiiic
對不起,這是一個誤解。我故意將提供的調用從引導方法轉移到my-app組件來說明我的問題:我的假設是將2個調用添加到組件提供程序中就足夠了。你能解釋爲什麼不能? – schacki