2

任何人都可以請指導如果我們完全不使用模板驅動表單,那麼實現自定義驗證器的正確方法是什麼?無功表單的角度2自定義驗證器

我已經通過

https://blog.thoughtram.io/angular/2016/03/14/custom-validators-in-angular-2.html

https://angular.io/docs/ts/latest/cookbook/form-validation.html#!#custom-validation

兩個走在最後創建指令,有必要嗎?或者我們可以做到這一點,而無需創建指令?

我嘗試這樣做:

//my-app.module.ts 
export interface ValidationResult { 
    [key: string]: boolean; 
} 

function personName(control: FormControl): ValidationResult { 

     if (!control.value) { 
      return null; 
     } 

     var valid = /^[a-zA-Z. ]*$/.test(control.value); 

     if (valid) { 
      return null; 
     } 
     return { "pattern": true }; 
    } 


@NgModule({ 
    imports: [ 
     CommonModule, 
     ReactiveFormsModule 
    ], 
    declarations: [ 
     MyComponent 
    ], 
    exports: [ 
    ], 
    providers: [{ provide: NG_VALIDATORS, useExisting: personName, multi: true }] 
}) 
export class MyModule { } 

但是當我申請PERSONNAME驗證我的反應形式,並測試它在瀏覽器中,我得到以下錯誤控制檯:

ERROR Error: Uncaught (in promise): Error: No provider for personName! 

回答

0

當使用活性形式,您不需要provide您的驗證器。在您的組件中創建表單時,請將它們附加到formControl對象上。當使用Form Builder時,看起來像這樣:

ngOnInit() { 
    this.myform = this.formBuilder.group({ 
    name: [undefined, personName], 
    }) 
}