我想在AngularJS中创建一个从订阅websocket返回数据的提供商(或其他服务)。如何将数据从提供商实时获取到作用域?
示例:app.provider('MyProvider', function () {
this.$get = function () {
var dataFromProvider ;
ws.subscribe('subscribeTopic', function (data) {
var dataFromProvider = data;
});
return {
dataFromProvider: dataFromProvider
}
}
});
app.controller('myCtrl', function ($scope, MyProvider) {
$scope.myData = MyProvider.dataFromProvider;
});
为Angular构建一个使用RxJS扩展的服务。
app.provider('MyProvider', function () {
this.$get = function (rx) {
var subject = new rx.Subject();
ws.subscribe('subscribeTopic', function (data) {
subject.onNext(data);
});
return { subject: subject };
}
});
使用app.controller("myVm", function($scope, MyProvider) {
var subscription = MyProvider.subject.subscribe(function(data) {
$scope.data = data;
});
$scope.$on("$destroy", subscription.dispose);
});
rxSubject可以处理多个订阅者,并与所有标准的rxJS过滤器和组合器一起工作。
例如一个使用angular.rx.js的服务,请看PLNKR上的这个DEMO