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], 
    }) 
}