全局 $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;
    });

  }]);