2017-08-11 24 views
0

我想創建一個使用角度2的反應形式。我無法抓住爲什麼「registerFrom」當我嘗試從createFrom方法訪問時給出一個未定義的錯誤的概念,但我可以在checkPassword方法中訪問它。在視圖初始化爲模板中的事件偵聽器之後,我使用checkpassword方法。我確信這兩種方法的使用方式都有一些背景邏輯。這個關鍵字在角度組件中的不同行爲

此外,當我從驗證程序中刪除registerForm,只是傳遞組件引用到回調,然後嘗試從回調訪問registerForm。它工作得很好

export class RegisterComponent { 

    registerForm : FormGroup; 

    constructor(
     private _authService: AuthService, 
     private _f : FormBuilder, 
     private _router: Router 
    ){ 
     this.createForm(); 
    } 


    createForm() : void { 
     this.registerForm = this._f.group({ 
      password_group : this._f.group({ 
       confirm_password : [ 
        '', 
        Validators.compose([ 
         CustomValidators.passwordMatch(this.registerForm) 
        ]) 
       ] 
      }), 
     }) 
    } 


    checkPassword() : any { 
     // Get typed password value 
     const password = this.registerForm.get('password_group.password').value; 
    } 
} 

回答

0

問題是CustomValidators.passwordMatch(this.registerForm)

您正在使用this.registerForm用於初始化this.registerForm的相同表達式,即初始化之前。

您可以按預期訪問它,但是當您這樣做時仍然未定義。

我對自定義驗證器沒有進一步的瞭解,但遞歸傳遞給FormGroup對我來說並不合適。

+0

有道理!表單驗證器函數只是一個閉包。返回函數包含formgroup。我試圖匹配密碼字段。組件引用給出原始密碼字段,而表單組保存確認的密碼值 – Jdsans