3

我使用的workingData服务包含渗透到我的应用程序中的数据。它向 MockworkingData对象返回一个 observable。

@Injectable()
export class WorkingDataService {
  getWorkingData(): Observable<WorkingData> {
    return Observable.of(WORKINGDATA);
  }
  getSelectedDate(): Observable<Date> {
    return Observable.of(WORKINGDATA.selectedDate);
  }
}

该对象的一个​​属性workingData是一个名为 的日期字段selectedDate

export const WORKINGDATA: WorkingData = {
  today: new Date(),
  selectedDate: new Date('11-15-2016'),
  targetDate: new Date(),
  data: []
};

该值可以通过单击“上个月”或“下个月”按钮来更新: 在此处输入图像描述

这会触发组件中的以下功能(或其incrementDate()对应功能)cal-nav

decrementDate(): void {
  let newDate = new Date(this.workingData.selectedDate.getDate());
  newDate.setMonth(newDate.getMonth() - 1);
  this.workingData.monthPrior = newDate;
}

observable 更新了workingDate注入服务的所有组件中的视图,但我现在需要触发month组件中的函数(它是组件的兄弟cal-nav)。每次更新时如何触发组件中的功能,即使它是从不同的组件更新的?monthworkingData.selectedDate

selectedDate更新:我现在单独订阅该属性。

ngOnInit(): void {
  this.getWorkingData();
  this.getSelectedDate(); // Just added
}

getSelectedDate(): void{
  this._workingDataService.getSelectedDate().subscribe(selectedDate => {this.myFunc();});
}
myFunc(){
  console.log('working');
}

这会触发myFunc()oninit 但不会在值更新时触发。

4

1 回答 1

7

你可以在你的代码中订阅你的 Observable

this.myObservable.subscribe( data => {
  myFunction();
 });

如果这不能满足您的需求,那么您必须提供更多代码或您确切需要的一些序列

于 2016-12-07T21:22:09.357 回答