全局 $http.get() 在 Angular 1.5 中的所有 scopes/controllers 每 5 秒更新一次
Global $http.get() that updates every 5 seconds across all scopes/controllers in Angular 1.5
在我的 Angular 项目中,我正在从我的 api 中加载 json 列表,该列表不断更新。我想在我的所有 angular 控制器中每 5 秒进行一次此更新,而无需为每个控制器发出新请求。
为什么不让服务在 $interval
上进行 API 调用,然后 $broadcast
一条消息和数据,每次兑现更新数据的承诺。
angular.module('app')
.service('PollingService', ['$http', '$rootScope', '$interval', function($http, $rootScope, $interval) {
var updatedData;
$interval(function() {
return $http.get(apiUrl).then(function successCallback(response) {
updatedData = response.data.data;
$rootScope.$broadcast('got new data!', { data: updatedData });
}, function failureCallback(reason) {
console.log(reason);
})
}, 5000);
}]);
然后在所有需要更新数据的控制器中监听广播:
angular.module('app')
.controller('someCtrl', ['$scope', function($scope) {
$scope.$on('got new data!', function(event, args) {
$scope.data = args.data;
});
}]);
在我的 Angular 项目中,我正在从我的 api 中加载 json 列表,该列表不断更新。我想在我的所有 angular 控制器中每 5 秒进行一次此更新,而无需为每个控制器发出新请求。
为什么不让服务在 $interval
上进行 API 调用,然后 $broadcast
一条消息和数据,每次兑现更新数据的承诺。
angular.module('app')
.service('PollingService', ['$http', '$rootScope', '$interval', function($http, $rootScope, $interval) {
var updatedData;
$interval(function() {
return $http.get(apiUrl).then(function successCallback(response) {
updatedData = response.data.data;
$rootScope.$broadcast('got new data!', { data: updatedData });
}, function failureCallback(reason) {
console.log(reason);
})
}, 5000);
}]);
然后在所有需要更新数据的控制器中监听广播:
angular.module('app')
.controller('someCtrl', ['$scope', function($scope) {
$scope.$on('got new data!', function(event, args) {
$scope.data = args.data;
});
}]);