我有一个问题,因为我不明白为什么Subject
会发出空数据。我有一个基础,从那里获取数据到如下所示的服务:
eventChanged = new Subject<any>();
constructor(private http: HttpClient) {
this.http.get<Event[]>(this.baseUrl)
.subscribe(events => {
this.events = events
this.eventChanged.next(this.events.slice());
});
}
getEvents(): Observable<any> {
return this.eventChanged.asObservable();
}
我的组件在ngOnInit()
中观察该主题
ngOnInit() {
this.dataService.getEvents()
.subscribe(
(events) => {
this.events = events;
});
}
它在我第一次使用组件构造函数"构造"服务时工作。
constructor(private dataService: EventListService) { }
但是当我更改视图组件然后回到他身边时,我会收到空this.events
我检查 EventService 的变量中是否有"Events[]",所以我不知道为什么 Subject 会发出或不发出任何值。有人知道发生了什么吗?
调用服务中的constructor
后,它会获取数据并通过主题发出数据,并将它们保存在events
属性中。
ngOnInit
您可能已经订阅了该Subject
因此您会收到这些数据。但这是发出这些服务的最后一刻(因为不会再次调用constructor
服务(。
尽管您正在尝试将数据保存在events
属性中。您不会在任何地方使用它们。
如果要将数据保留在服务中并能够随时获取它们。您可以使用记住最后一个值的BehaviorSubject
。
eventChanged = new BehaviorSubject<any>([]);
constructor(private http: HttpClient) {
this.refetch();
}
getEvents(): Observable<any> {
return this.eventChanged.asObservable();
}
refetch(): void {
this.http.get<Event[]>(this.baseUrl)
.subscribe(events =>
this.eventChanged.next(events);
});
}