在我的应用程序中,我使用BehaviorSubject将数据从提供程序传递到页面组件:
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 = [];
}
正如我从搜索中了解到从提供者BehaviorSubject传递数据的正确方法是一种最佳解决方案,但我想省略最后收到的值,如果它不是来自next()。实现这种行为的最佳做法是什么?
答案 0 :(得分:1)
使用Subject
代替BehaviorSubject
,订阅只会在首次发出后开始。
<强> BehaviorSubject 强>
主题的变体之一是BehaviorSubject,它有一个 &#34;当前价值&#34;的概念。它存储发出的最新值 它的消费者,每当新的Observer订阅时,它都会 立即收到&#34;当前值&#34;来自BehaviorSubject。
希望这会有所帮助!!