サービスでRxJSを使用する
たとえば、サービスが状態を保持している状況ではどうでしょうか。そのサービスへの変更をプッシュするにはどうすればよいですか。また、ページ上の他のランダムコンポーネントはそのような変更を認識できますか?最近この問題に取り組むことに苦労している
Angular用のRxJS拡張を使用してサービスを構築します。
<script src="//unpkg.com/angular/angular.js"></script>
<script src="//unpkg.com/rx/dist/rx.all.js"></script>
<script src="//unpkg.com/rx-angular/dist/rx.angular.js"></script>
var app = angular.module('myApp', ['rx']);
app.factory("DataService", function(rx) {
var subject = new rx.Subject();
var data = "Initial";
return {
set: function set(d){
data = d;
subject.onNext(d);
},
get: function get() {
return data;
},
subscribe: function (o) {
return subject.subscribe(o);
}
};
});
次に、単に変更をサブスクライブします。
app.controller('displayCtrl', function(DataService) {
var $ctrl = this;
$ctrl.data = DataService.get();
var subscription = DataService.subscribe(function onNext(d) {
$ctrl.data = d;
});
this.$onDestroy = function() {
subscription.dispose();
};
});
クライアントはで変更をサブスクライブできDataService.subscribe
、プロデューサーはで変更をプッシュできますDataService.set
。
PLNKR上のDEMO。