Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当可观测属性发生变化时,Angular2触发函数_Javascript_Angular_Typescript_Observable_Angular2 Changedetection - Fatal编程技术网

Javascript 当可观测属性发生变化时,Angular2触发函数

Javascript 当可观测属性发生变化时,Angular2触发函数,javascript,angular,typescript,observable,angular2-changedetection,Javascript,Angular,Typescript,Observable,Angular2 Changedetection,我使用一个workingData服务来保存渗透到我的应用程序中的数据。它向模拟工作数据对象返回一个可观察值 @Injectable() export class WorkingDataService { getWorkingData(): Observable<WorkingData> { return Observable.of(WORKINGDATA); } getSelectedDate(): Observable<Date> { ret

我使用一个
workingData
服务来保存渗透到我的应用程序中的数据。它向模拟
工作数据
对象返回一个可观察值

@Injectable()
export class WorkingDataService {
  getWorkingData(): Observable<WorkingData> {
    return Observable.of(WORKINGDATA);
  }
  getSelectedDate(): Observable<Date> {
    return Observable.of(WORKINGDATA.selectedDate);
  }
}
可通过单击“上个月”或“下个月”按钮更新此值:

这将触发
cal nav
组件中的以下函数(或它的
incrementDate()
对应项):

decrementDate(): void {
  let newDate = new Date(this.workingData.selectedDate.getDate());
  newDate.setMonth(newDate.getMonth() - 1);
  this.workingData.monthPrior = newDate;
}
observable更新了注入了
工作日期
服务的所有组件中的视图,但我现在需要触发
组件中的函数(它是
校准导航
组件的同级)如何在每次
工作数据时触发
组件内的功能。即使从其他组件更新,也会更新selectedDate

更新:我现在分别订阅
selectedDate
属性

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

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

这会在Init上激发
myFunc()
onit,但不会在值更新时激发。

您只需在代码中订阅您的可观测值即可

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

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

我不想触发函数,除非特定属性发生更改,而不是整个对象。有没有办法做到这一点?是的,单独观察该属性。这足够吗?创建一个可观察的对象,持有您的属性并订阅它。我以为我已经做到了
getSelectedDate()
。我必须如何更改代码?查看我的更新服务
this.myObservable.subscribe( data => {
  myFunction();
 });