2017-02-13 111 views
0

我有一个需要访问本地组件变量的自定义验证器。在我的组件我有被改变的变量布尔作为用户与表单交互Angular 2将参数变量传递给验证器函数

export class MyForm implements OnInit{ 
    public localBool : boolean; 

    constructor(public fb: FormBuilder) 
    ngOnInit(){ 
    this.form = this.fb.group({ 
     field : ['', [CustomValidator.validateIfRequired(this.localBool)]] 
    }) 
    } 

} 


export CustomValidator { 
    static validateIfRequired(condition:boolean){ 
      console.log(condition); 
      .... 
    } 

} 

我得到了一个未定义当我使用它像这样

CustomValidator.validateIfRequired(this.localBool) 

,但我得到真正的当我使用它像这样

CustomValidator.validateIfRequired(true) 

如何传递或评估局部变量? +1来简要说明Angular如何评估参数以及为什么我得到未定义的参数。

回答

0

您应该使用验证这样

import {Control} from "@angular/common"; 

interface ValidationResult { 
    [key: string]: boolean; 
} 

export function emailFormat(control: Control): ValidationResult { 
    var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/; 

    if (control.value != "" && (control.value.length <= 5 || !EMAIL_REGEXP.test(control.value))) { 
     return {"incorrectMailFormat": true}; 
    } 
    return null; 
} 

export class LoginPage { 
    public loginForm: ControlGroup; 

    constructor(private fb: FormBuilder) { 
     this.loginForm = fb.group({ 
      'email': ['', Validators.compose([Validators.required, emailFormat])], 
      'password': ['', Validators.compose([Validators.required, Validators.minLength(6)])] 
     }); 
    } 
}