Búsqueda de sitios web

javascript - Angular2 activar función cuando cambia la propiedad observable


Utilizo un servicio workingData que contiene datos que se filtran en toda mi aplicación. Devuelve un observable al objeto Mock workingData.

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

Una propiedad del objeto workingData es un campo de fecha llamado selectedDate.

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

Este valor se puede actualizar haciendo clic en los botones "mes anterior" o "mes siguiente":

Esto activa la siguiente función (o su contraparte incrementDate()) en el componente cal-nav:

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

El observable actualiza la vista en todos los componentes en los que se inyecta el servicio workingDate, pero ahora necesito disparar una función en el componente month (que es un hermano del componente cal-nav). ¿Cómo disparar una función en el componente month cada vez que se actualiza workingDate.selectedDate, incluso si se actualiza desde un componente diferente?

ACTUALIZACIÓN: Ahora me suscribo a la propiedad selectedDate por separado.

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

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

Esto dispara myFunc() en oninit pero no cuando el valor se actualiza.

Respuesta #1

Simplemente puedes suscribirte a tu Observable en tu código

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

Si eso no satisface tus necesidades, entonces tienes que proporcionar más código o alguna secuencia de lo que exactamente necesitas

Artículos relacionados