2017-05-05 51 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); 
     } 
    );