Angularjs使用共享服务自动刷新控制器

Angularjs使用共享服务自动刷新控制器,angularjs,Angularjs,经过大量研究,我找到了以下答案,它与我的代码非常吻合,并清楚地解释了如何使用共享服务(带有缓存和承诺)在控制器之间共享数据 然而,这个答案(以及我能找到的所有其他答案)并没有说明如何保持每个控制器的同步。当一个控制器发生变化时,我希望另一个控制器重新加载/刷新其数据 例如,假设控制器“test”向服务器提交一些数据以更新用户名。现在控制器“test1”显示一个不同的名称,因为它有自己的作用域。如何使“test1”重新加载服务以获取最新数据(而不刷新整个页面) 当test1更改数据时,是否有人可

经过大量研究,我找到了以下答案,它与我的代码非常吻合,并清楚地解释了如何使用共享服务(带有缓存和承诺)在控制器之间共享数据

然而,这个答案(以及我能找到的所有其他答案)并没有说明如何保持每个控制器的同步。当一个控制器发生变化时,我希望另一个控制器重新加载/刷新其数据

例如,假设控制器“test”向服务器提交一些数据以更新用户名。现在控制器“test1”显示一个不同的名称,因为它有自己的作用域。如何使“test1”重新加载服务以获取最新数据(而不刷新整个页面)

当test1更改数据时,是否有人可以扩展此代码以使test重新加载服务

 var app = angular.module('plunker', []);

      app.service('cache', function ($http,$q) {
          var mycache={};
          return {
              getdata: function (key) {
                  var deferred = $q.defer();
                  if (mycache[key]) {
                      deferred.resolve(mycache[key]);
                  }
                  else {
                      $http.get('TextFile.txt').then(function (data) {
                          mycache[key] = data.data;
                          deferred.resolve(mycache[key]);
                      });
                  }
                  return deferred.promise;
              }
          }
      });


      app.controller('test', function ($scope, cache) {
          cache.getdata('cache').then(function (data) {
              $scope.data = data;
          });
     });

       app.controller('test1', function ($scope, cache) {
          //since data is already cached now it will server the cached data
          cache.getdata('cache').then(function (data) {
              $scope.data = data;
          });
     });

我从服务中拍摄了一个事件。看起来有点像这样

.service("Data", function($http, $rootScope) {
  var this_ = this, 
      data;

  $http.get(some_url, function(response) {
    this_.set(response.data);
  }

  this.get = function() {
    return data;
  }

  this.set = function(data_) {
    data = data_;
    $rootScope.$broadcast('event:data-change');
  }

});
控制器与服务的通信方式如下

$rootScope.$on('event:data-change', function() {
    $scope.data = Data.get();
}

$scope.update = function(d) {
  Data.set(d);
}

谢谢分享。我不知道我发布的代码中是怎么写的,但似乎相关的部分是“$broadcast”和“$on”。每当有人调用该服务时,该服务可以向控制器广播。在Angularjs中,难道没有一种自动或简单的方法让控制器重新加载吗?这展示了如何使用服务中的$broadcast更新控制器。每当调用服务的set()方法时,所有侦听广播的控制器都将更新。