BehaviorSubject:如果next()未触发

时间:2017-04-18 13:48:28

标签: angular ionic2 rxjs

在我的应用程序中,我使用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()。实现这种行为的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

使用Subject代替BehaviorSubject,订阅只会在首次发出后开始。

<强> BehaviorSubject

  

主题的变体之一是BehaviorSubject,它有一个   &#34;当前价值&#34;的概念。它存储发出的最新值   它的消费者,每当新的Observer订阅时,它都会   立即收到&#34;当前值&#34;来自BehaviorSubject。

希望这会有所帮助!!