我遇到了问题,因为我不明白为什么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;
});
}
它适用于我第一次构建&#34;使用组件构造函数的服务。
constructor(private dataService: EventListService) { }
但是当我更改视图组件然后返回给他时,我收到空this.events
我检查EventService是否有&#34; Events []&#34;在他的变量中,所以我不知道为什么主体发出或不发出任何值。谁知道发生了什么事?
答案 0 :(得分:0)
在您的服务中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);
});
}