2016-08-18 1 views
2

Ich brauche rxjs subscribe Methode auf bestimmte Eigenschaft Änderungen beschränkt werden. Ich habe versucht, es mit distinctUntilChanged zu tun, aber ich denke, ich vermisse etwas.Subskribieren Sie eine Observable nur, wenn eine bestimmte Eigenschaft geändert wurde

Ich möchte nur abonnieren, Feuer, wenn die Eigenschaft data.members[] geändert.

this.myService.loadData(this.data.id) 
    .distinctUntilChanged() 
    .subscribe(data => { 
    this.data = data; 
    console.log("data changed", data); 
}); 

Wie kann ich auf bestimmte Änderungen reagieren?

+0

Haben Sie auf bestimmte Änderungen an der 'data.members'-Eigenschaft ** reference ** value reagiert? Oder deutliche Änderungen am ** Inhalt ** des Arrays, auf das sich die Eigenschaft 'data.members' bezieht? – georgeawg

+0

Ich möchte auf Änderungen innerhalb des Arrays reagieren (Element hinzugefügt/gelöscht). –

Antwort

0

am documentation (Rxjs v4) Sehen, ich sehe, dass Sie in der Lage sein sollte, zu erreichen, was Sie wollen, mit Rx.Observable.prototype.distinctUntilChanged([keySelector], [comparer]), und mit Hilfe der keySelector die Eigenschaft, deren Änderungen, die Sie ermitteln möchten auszuwählen, und comparer Parameter Gleichheit zu erkennen.

Rxjs v5 hat distinctUntilKeyChanged und distinctUntilChanged mit ähnlichen Funktionen.

Sie können bei den Tests zum Beispiel der Nutzung einen Blick: [https://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilChanged-spec.ts, https://github.com/ReactiveX/rxjs/blob/master/spec/operators/distinctUntilKeyChanged-spec.ts]

ich denke, dass Sie etwas nach oben, wenn nicht, Post zurück, was Sie versucht haben, in der Lage setzen sollten.

+0

'.distinctUntilChanged ((Daten) => {return data.members;})' funktioniert! Wie kann ich nach mehreren Arrays suchen? (Mitglieder, Beziehungen, Kinder)? –

0

.distinctUntilChanged((data) => { return data.members; }) funktioniert! Wie kann ich nach mehreren Arrays suchen? (Mitglieder, Beziehungen, Kinder)?

Ich möchte auf Änderungen innerhalb des Arrays reagieren (Element hinzugefügt/gelöscht).

Verwenden Sie angular.equals, um tief zu vergleichen.

this.myService.loadData(this.data.id) 
    .distinctUntilChanged((data) => (data.members), (a,b) => (angular.equals(a,b)) 
    .subscribe(data => { 
    this.data = data; 
    console.log("data changed", data); 
}); 

Weitere Informationen zu distinctUntilChanged finden RxJS distinctUntilChanged API Reference.

Weitere Informationen zu angular.equals finden Sie unter AngularJS angular.equals API Reference.

Verwandte Themen