2017-05-05 3 views
0

Ich habe einen Eingang mit einem CustomValidator namens fooValidator (was es tut irrelevant ist hier, es ist nur ein eigener Prüfer, die die Eingabe bestätigen, wenn es bis zu einem gewissen regexp correponds):Angular: Validierung nach dem ngModelChange ausgeführt

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

und in meiner Komponente:

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

"Gültig" wird nie in meiner Konsole angezeigt. Das passiert, wenn ngModelChange vor der Validierung ausgeführt wird. Ich kann meine blah Funktion in eine setTimeout verpacken und "Gültig" würde erscheinen. Gibt es eine Möglichkeit, ohne einen Hacky setTimeout zu tun?

+0

Ist der Asynchron-Validator verwenden? –

+0

Überhaupt nicht, es nur überprüfen, ob die Eingabe von einem Regexp übereinstimmt. Soll es ohne setTimeout funktionieren? – Scipion

+1

Sie können 'statusChanges' abonnieren, wie in https://angular.io/docs/ts/latest/guide/reactive-forms.html#!#observe-control für' valueChanges' gezeigt. –

Antwort

1

können Sie

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