Ich habe zwei Geschwisterkomponenten, eine zum Filtern einer Liste von Videos und eine zum Anzeigen der Liste von Videos.BehaviourSubject gibt den alten Wert zurück, nachdem er über zwei Geschwisterkomponenten aktualisiert wurde
Um diese beiden Komponenten zu kommunizieren, habe ich einen Service gemacht. Der Code des Service ist wie folgt:
import {Injectable} from '@angular/core';
import {Video} from '../../assets/video';
import { BehaviorSubject} from 'rxjs/BehaviorSubject';
declare var window: any;
@Injectable()
export class VideoService {
videoArray: Video[];
private filteredVideoArray = new BehaviorSubject<Video[]>(window.videos);
currentMessage = this.filteredVideoArray.asObservable();
constructor() {
this.videoArray = window.videos;
}
getVideos(): Video[] {
return this.videoArray;
}
updateFilteredVideos(message: Video[]) {
this.filteredVideoArray.next(message);
console.log(this.filteredVideoArray.getValue());
}
getFilteredVideos(): Video[] {
console.log(this.filteredVideoArray.getValue());
return this.filteredVideoArray.getValue();
}
}
Beide Komponenten abonnieren Sie den BehaviourSubject-Objekt:
ngOnInit() {
this.videoService.currentMessage.subscribe(message => this.videoArray = message);
}
Und wenn updateFilteredVideos() aufgerufen wird es immer druckt den entsprechenden Wert, aber Wenn getFilteredVideos() aufgerufen wird, gibt es immer den ursprünglichen Wert zurück. Nicht der aktualisierte Wert.
Ich habe diesen Konstruktor zu meinen Klassen app.component.ts und app.module.ts hinzugefügt, aber es funktioniert immer noch nicht: | –
Ok, ich werde es später dann versuchen und werde dann zurück zu dir kommen. Könnte ein anderes Problem sein .. –
Nein, Entschuldigung, Sie hatten völlig Recht, mein Problem war ich hatte immer noch den Dienst im Anbieter für beide Kinder-Komponenten. Sobald ich diese entfernte, funktionierte es gut. Vielen Dank! –