TLDR: Observable-Objekt löst keine erneute Komponentenzerlegung aus, bis vom Benutzer eine Aktion ausgeführt wird (klicken Sie zum Beispiel auf eine Schaltfläche).Angular2 Observable löst das erneute Rendern nicht aus
Ich aktualisiere ein Observable, das von einem BehaviorSubject unterstützt wird, das in einem Service enthalten ist, der in meine Komponente injiziert wird.
In meiner Komponente verwende ich eine einfache *ngIf="myObservable$ | async"
, um ein div anzuzeigen.
ich es geschafft, zwei Situationen zu replizieren, ein Arbeits- und ein, das nicht, aber ich kann nicht verstehen, was der Unterschied ist:
//CASE 1
this._mySubject$.next(true); //THIS DOES TRIGGER RERENDERING
//CASE 2
this.http.get(url)
.map(res => res.json())
.subscribe(body => {
this._mySubject$.next(true); //THIS DOESN'T TRIGGER RERENDERING UNTIL AN ACTION IS MADE
});
Wie wird der gesamte Stream ausgelöst? Und welche Version von angular2 benutzt du? - Sie können Ihr Problem wahrscheinlich lösen, indem Sie das '.next (true)' in ein 'ngZone.run (...) 'hüllen - dies sollte jedoch bei einem einfachen Rest-Call nicht notwendig sein rest-call ist irgendwie in einen anderen asynchronen/externen Trigger eingebunden – olsn
Ich benutze Angular 2.1.0. Meine Komponente, die bereits das Observable abonniert hat, ruft die Service-Funktion auf, die den einfachen http-Aufruf (nicht in irgendwas verpackt) ausführt. – Yanis26
Gibt es einen besonderen Grund, den Block 'subcribe()' zum Aufruf von '.next()'? Abonnentenblöcke sollten nicht verwendet werden, um Nebenwirkungen zu erzeugen. Nur der oder die Endverbraucher des Observablen sollten abonnieren. – AngularChef