I Observable und Themen aus Rxjs bin mit zwischen zwei Komponenten zu kommunizieren, ist der Service-Teil:Wie Observable für komponentenübergreifende Kommunikation verwenden
import {
Injectable,
EventEmitter,
Output
} from '@angular/core';
import {
HttpClientModule,
HttpClient
} from '@angular/common/http';
import {
Observable
} from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import {
Subject
} from 'rxjs/Subject';
import {
AppConstants
} from './../config/constants';
@Injectable()
export class GlobalService {
private subject = new Subject <any>();
@Output() LoggedIn: EventEmitter <any> = new EventEmitter();
mfaData: any;
constructor(private http: HttpClient) {
}
validateCreds(postData, institutionId, customerId) {
return this.http.post(AppConstants.baseUrl + AppConstants.serverRoutes.validateCreds + institutionId + '/' + customerId, postData)
.subscribe(response => {
console.log(response);
if (response['status'] == 203) {
this.mfaData = response['body'].questions;
if (this.mfaData[0].choices || this.mfaData[0].imageChoices) {
console.log('hey there');
this.subject.next({
mfaData: JSON.stringify(this.mfaData)
});
}
}
})
}
refreshHeaders(): Observable <any> {
return this.subject.asObservable();
}
}
import {
Subscription
} from 'rxjs/Subscription';
import {
GlobalService
} from '../../../providers/global.serivce';
export class MfaChallengeComponent implements OnInit {
subscription: Subscription;
constructor(private activatedRoute: ActivatedRoute, private bankService: BanksService, private globalService: GlobalService) {
this.subscription = this.globalService.refreshHeaders().subscribe(message => {
console.log(message);
});
}
}
Aber wenn ich die Daten vom Backend erhalte, rufe ich die nächste Methode des Subjekts auf und rufe sie im Konstruktor der anderen Komponente erneut auf. Es funktioniert nicht, während ich gesehen habe, wie es funktionierte. Der Service wurde weltweit injiziert.
Es gibt bereits eine wirklich gute Erklärung unten. Ich würde nur hinzufügen, dass aus der eckigen Perspektive "Konstruktor" sehr selten ein guter Ort ist, um einen Dienst aufzurufen. 'ngOnInit()' ist normalerweise, wo die Dinge stattdessen passieren sollten. –