2

Ich verwende einen workingData Service, der Daten enthält, die meine Anwendung durchdringt. Es gibt eine Observable zum Mock workingData Objekt zurück.Angular2-Trigger-Funktion, wenn beobachtbare Eigenschaft ändert

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

Eine Eigenschaft auf dem workingData Objekt ist ein Datumsfeld selectedDate genannt. enter image description here

Dies löst die folgende Funktion (oder es ist incrementDate() Gegenstück) in der cal-nav Komponente:

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

Dieser Wert kann durch Klicken auf den „Vormonats“ oder „nächsten Monat“ Buttons aktualisiert werden

Das Observable aktualisiert die Ansicht in allen Komopnenten, in denen der Dienst workingDate eingespeist wird, aber ich muss jetzt eine Funktion in derauslösenKomponente (die ein Geschwister der Komponente cal-nav ist). Wie löst eine Funktion in der month Komponente jedes Mal workingData.selectedDate wird aktualisiert, auch wenn es von einer anderen Komponente aktualisiert wird?

UPDATE: Ich abonniere jetzt die selectedDate Eigenschaft separat.

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

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

Dieser feuert myFunc() oninit aber nicht, wenn die der Wert Updates.

Antwort

4

Sie können nur

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

in Ihrem Code auf Ihre beobachtbare abonnieren Wenn das nicht Ihre Bedürfnisse nicht erfüllt, dann müssen Sie mehr Code oder eine Folge von dem, was Sie genau brauchen

+0

ich nicht möchte die Funktion auslösen, es sei denn, diese spezifische Eigenschaft ändert sich, nicht das gesamte Objekt. Gibt es einen Weg, das zu erreichen? –

+0

Ja, beobachten Sie diese Eigenschaft separat. – lastWhisper

+0

Zeigen Sie uns ein Beispiel – lastWhisper

Verwandte Themen