2017-01-27 31 views
0

我想vlidate用戶表單只能創建過程中,但沒有更新Angular2驗證表單只在一定條件下

這是我的驗證邏輯

this.userform = this._formbuilder.group({ 
    first_name: ['', Validators.required], 
    last_name: ['', Validators.required], 
    username: ['', Validators.compose(
    [ 
     Validators.required,Validators.minLength(5) 
    ] 
)], 
    password: ['',Validators.compose([ 
    Validators.required,ValidationService.passwordValidator 
    ])], 
    email: ['', Validators.compose([ 
    Validators.required,ValidationService.emailValidator 
    ])], 
    role: ['', Validators.required], 

}) 

我想驗證密碼只能創建過程中即當NEWUSER變量爲真,從而IVE試圖上面

this.userform = this._formbuilder.group({ 
    ..... 

    password: ['', 

     (this.newUser) ?Validators.compose([ 
      Validators.required,ValidationService.passwordValidator 
      ]):"" 

     ], 
.... 
}) 

失敗的返回錯誤

rror: Error in ./UsersComponent class UsersComponent - inline 
    template:113:51 caused by: 
    v is not a function 
    Error: Error in ./UsersComponent class UsersComponent - 
    inline template:113:51 caused by: v is not a function 
+0

哪裏是this.newUser設置? –

+0

嘗試通過'null'而不是''''':'this.newUser? Validators.compose(...):null' –

回答

1

您可以創建一個custom validator,以編程方式檢查所需,如果this.user可用,請致電passwordValidator將其設置爲唯一驗證器。

或者

你可以初步確定:

this.userform = this._formbuilder.group({ 
    ..... 

    password: [''] //no initial validators, 
.... 
}) 

,並在this.newUser設置爲true的功能,使用setControl

this.userform.setControl("password",new FormControl('',Validators.compose([ 
      Validators.required,ValidationService.passwordValidator 
      ])); 
0

爲什麼你不想驗證表單,當用戶什麼改變他的個人資料?這意味着用戶可以在更新他的個人資料後沒有用戶名,密碼和電子郵件?這不是邏輯。

+0

此表單用於用戶故事crud操作,創建用戶時使用默認密碼,但更新用戶憑據時爲管理員,他可以更新密碼或無法更新密碼,因此密碼在更新期間不是強制性的,但是在創建期間是強制性的。希望它有意義 –

+0

它是有道理的!在這種情況下,請檢查這篇文章:http://stackoverflow.com/questions/40404485/angular-2-add-validator-after-control-initialization –