Я хочу создать поставщика (или другую услугу) в 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;
});
Создайте сервис с расширениями 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