[angular2 RC4 + @ Winkel/forms module]angular2 form + Async-Validierung + ChangeDetectionStrategy.OnPush = keine Ansicht aktualisieren?
Ich habe eine Komponente OnPush
Änderungsdetektion eine FormGroup
enthält. Dieses Formular enthält einen FormControl
mit einem async
Validator.
Wenn die Validierung abgeschlossen ist (nicht mehr pending
), wird die Ansicht nicht aktualisiert. Nur das input
Blur-Ereignis macht Ansicht aktualisieren ..
Wenn ich die OnPush
Änderungserkennung entfernen, funktioniert es ordnungsgemäß.
Ist es ein eckiger Fehler oder mache ich etwas falsch?
Mit 'OnPush', Ansicht Refresh ist auch ausgelöst werden, wenn Ereignisse innerhalb der Komponente wie ein Klick oder eine Eingabe Typisierung geschehen. Im Plocker wird die Ansicht aktualisiert, wenn Sie mit der Eingabe beginnen ("ausstehend" wird angezeigt). Und Synchronisierungsvalidatoren funktionieren gut .. also weiß ich nicht, ob ich es als normales Verhalten oder einen Fehler mit asynchronen Validatoren betrachten kann. – bertrandg
Ok, wenn Sie also in diesem Fall darauf bestehen, OnPush zu verwenden, sollten Sie das erwartete Verhalten auslösen Ändern Sie die Erkennung manuell. Fügen Sie 'Import {..., ChangeDetectorRef} von' @ angular/core '; 'hinzu und injizieren Sie eine Instanz davon in den Konstruktor. In Ihrer Methode haben Sie diese hinzufügen: 'setTimeout (() => { resolve (null); this.changeRef.markForCheck();} , 500)' –
Async Ausführung ruft nur Erkennungsänderung in 'OnPush' bei Verwendung mit' | async', was in diesem Fall nicht möglich ist. Ich denke auch, dass Sie die Änderungserkennung manuell aufrufen müssen. –