Die Observable
, wie der Name schon sagt, ist ein Objekt, das für das Ereignis neuer Daten "beobachtet" werden kann, oder mit anderen Worten "subscribe" für das Ereignis neuer Daten. Was die Daten aussenden, ist nicht das Observable, aber es ist das observer
, das für neue Daten beobachtet und es unter Verwendung der next
Funktion ausstrahlt.
Observable - ein Objekt zum Abonnieren, um neue Daten zu erhalten. Observer - ein Objekt, um neue Daten zu veröffentlichen.
let observable: Observable<string> = new Observable(observer => {
observer.next('Hello'); // the observer emit the data
});
observable.subscribe((data) => { // You subscribe to the observable for new data
console.log(data); // Print 'Hello'
});
Wenn Sie neue Daten an alle Teilnehmer emittieren können, die zu dieser beobachtbaren Sie seine Beobachter verwenden müssen abonniert:
let observer;
let observable: Observable<string> = new Observable(o => {
observer = o;
observer.next('Hello'); // the observer emit the data
});
observable.subscribe((data) => { // You subscribe to the observable for new data
console.log(data); // Print 'Hello World!
});
observer.next('World!');
Hinweis, wenn Sie die beobachtbaren verwenden, um sicherzustellen, dass Alle Komponenten werden bei der Aktualisierung mit den Benutzerinformationen aktualisiert. Ich würde dem Dienst eine Aktualisierungsmethode hinzufügen, mit der der neue Wert ausgegeben werden kann.
@Injectable()
export class UserInfoService {
public user: UserInfo = {
firstName: "O",
lastName: "K",
email: "[email protected]",
country: "uk",
avatarUrl: null,
receiveNotifications: true
}
private observer;
private observable: Observable<UserInfo>;
constructor() {
this.observable = new Observable(o => {
this.observer = o;
this.observer.next(user);
});
}
getUserInfo(): Observable<UserInfo> {
return this.observable;
}
updateUserInfo(user: UserInfo) {
this.user = user;
this.observer.next(this.user);
}
}
nun im Dialogkomponente können Sie die getUserInfo
Funktion aus dem Dienst verwenden, um eine beobachtbare erhalten Sie abonnieren können, um Benutzerinformationen zu erhalten. und verwenden Sie die updateUserInfo
, um es zu aktualisieren.
Ich versuchte alles ausführlich zu erklären. Wenn Sie irgendwelche Fragen haben, sind Sie willkommen. –
Sie sollten das 'asObservable()' auf dem Betreff verwenden, um eine Observable für es zurückzugeben. –
Meinst du das? 'return this.userData.toObservable()'? Wo kann ich darüber lesen? Ich habe nur [das] gefunden (http://xgrommx.github.io/rx-book/content/notification/notification_instance_methods/toobservable.html) –