为什么主题在更改组件 RXjs Angular 2+ 后发出空数组



我有一个问题,因为我不明白为什么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);
    });
}

最新更新