Entschuldigung, wenn dies trivial ist.Mit 2 oder mehr Komponenten abonnieren Sie eine kalte Observable zur Verfügung gestellt von einem Injizierbaren
Ich bin neu in Angular 4 und ich kämpfe mit einem scheinbar einfachen Problem: mit 2 oder mehr Komponenten abonnieren Sie eine Observable
von einem (Login) Injectable
zur Verfügung gestellt.
Mein Ziel ist es zu haben:
- Eine Ansicht, die ein Ereignis aufrufen auf
component1
component1
wird ein Verfahren auf einemlogin.service
login.service
aufrufen wird eine REST-Aufruf- Die Antwort machen ist " Broadcast "mit einem
.next()
component1
undcomponent2
wird re entsprechend handeln
Dies funktioniert perfekt, wenn es nur 1 Komponente ist, aber wenn ich eine andere Komponente einführen, die subscribe()
s zum Observable
, nur die zweiten Komponente gleich am Anfang mitgeteilt wird (dh: sie erhält nur eine Nachricht), während component1
funktioniert weiterhin wie erwartet und empfängt alle Nachrichten.
habe ich anfangs Subject
und BehaviorSubject
mit der asObservable()
Methode fiel dann aber zurück auf Ebene Observable
mit ähnlichen Ergebnissen.
Hier ist ein Ausschnitt zeigen, zu helfen:
login.service:
@Injectable()
export class LoginService {
private _loggedIn = new BehaviorSubject<booelan>(false);
public loggedIn$ = this._loggedIn.asObservable();
login() {
// call API service
this._loggedIn.next(true);
}
}
component1:
@Component({
selector: 'app-test1',
template: `<button (click)="login()"`,
providers: [ LoginService ]
})
export class AppTest1Component {
subscription: Subscription;
observer: Observer;
constructor(private loginService: LoginService) {}
ngOnInit() {
this.subscription = this.loginService.loggedIn$.subscribe(
state => { console.log('got event!', state); },
error => { console.log('Error:', error)},
() => { console.log('Complete'); }
);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
component2:
@Component({
selector: 'app-test2',
template: `<button (click)="login()"`,
providers: [ LoginService ]
})
export class AppTest2Component {
subscription: Subscription;
observer: Observer;
constructor(private loginService: LoginService) {}
ngOnInit() {
this.subscription = this.loginService.loggedIn$.subscribe(
state => { console.log('got event!', state); },
error => { console.log('Error:', error)},
() => { console.log('Complete'); }
);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
Was ist der einfachste Weg, um mehrere Komponenten zu abonnieren Observable
, die vermutlich von einem Dienst zur Verfügung gestellt werden, und alle Nachrichten erhalten?
Die Frage hier gepostet: Angular - shared service between components doesn't work bezieht sich nicht auf Observables und Abonnements.
Diese Frage steht möglicherweise nicht mit den Observablen in Zusammenhang, aber sie löst das gleiche Problem. Bitte lesen Sie die Antwort und versuchen Sie es in Ihrer App. – echonax
Sie sind auf. Tut mir leid, dass ich mir die Zeit genommen habe, die Antwort gründlich zu lesen. Ich hatte Tunnelblick. – mstubbies
Passiert das Beste von uns :-) – echonax