2017-05-05 47 views
0

後執行我有一個名爲fooValidator的CustomValidator輸入驗證(它的作用在這裏無關緊要,它只是一個自定義的驗證,其驗證輸入,如果它correponds一些正則表達式):角:在ngModelChange

   <form #contratForm="ngForm"> 
        <input type="text" 
          class="validate" 
          [(ngModel)]="foo" 
          name="foo" 
          ngControl="foo" 
          fooValidator 
          (ngModelChange)="blah($event)" 
          required 
        /> 
       </form> 

和我的組件:

blah(event) { 
    if(this.contratForm.controls.foo.valid){ 
    console.log("Valid") 
    } 
} 

「有效」從未顯示在我的控制檯中。這發生在ngModelChange在驗證之前執行。我可以將我的blah函數包裝在setTimeout中,並且會顯示「有效」。有沒有辦法這樣做,而不使用hacky setTimeout

+0

是驗證異步? –

+0

一點也不,它只是檢查輸入是否與正則表達式匹配。是否應該在沒有setTimeout的情況下工作? – Scipion

+1

您可以訂閱'statusChanges',如https://angular.io/docs/ts/latest/guide/reactive-forms.html#!#observe-control for'valueChanges'所示。 –

回答

1

可以使用

this.contratForm.get('foo') 
    .statusChanges.forEach(
     (s) => { 
      console.log(s); 
     } 
    );