在我的应用程序中,我正在使用行为主题将数据从提供商传递到页面组件:
jobsmanager
private futureJobsSource = new BehaviorSubject <Array<Job>>([]);
futureJobsUpdate = this.futureJobsSource.asObservable();
来源更新的地方:
getFutureJobs(date: string) {
//
//
this.api.getFutureJobs(request).subscribe((res) => {
console.log(this.TAG + 'getFutureJobs: success: ' + JSON.stringify(res));
this.futureJobsSource.next(res);
}, (err) => {
console.log(this.TAG + 'getFutureJobs: failure: ' + JSON.stringify(err));
this.message.showErrorAlert(err.detail);
});
}
和我的组件, futureJobSpage
setSearchDate() {
DatePicker.show(this.datePickerOptions).then((date) => {
this.jobsManager.getFutureJobs(moment(date).format('MM/DD/YYYY'));
});
}
ionViewDidLoad() {
console.log('ionViewDidLoad FutureJobsPage');
this.subscription = this.jobsManager.futureJobsUpdate.subscribe((res) => {
console.log(this.TAG + 'subscribe: ' + JSON.stringify(res));
this.futureJobs = res;
});
}
ionViewDidLeave() {
console.log(this.TAG + 'ionViewDidLeave');
this.jobsManager.futureJobsUpdate.distinctUntilChanged();
this.subscription.unsubscribe();
this.futureJobs = [];
}
我从我对正确的方法中传递数据的方法的搜索中了解到,从提供者行为主题是一个最佳解决方案,但是如果不是从下一个(((,我想省略最后一个接收的值。实现这种行为的最佳实践是什么?
使用Subject
代替BehaviorSubject
,订阅仅在第一次发射后才开始。
acrapiorSubject
受试者的变体之一是行为对象,它具有 "当前价值"的概念。它存储发出的最新值 它的消费者,每当新观察者订阅时,它都会 立即从行为主题接收"当前值"。
希望这会有所帮助!