控制器之间的$ rootscope并刷新它

时间:2014-09-04 18:13:24

标签: javascript json angularjs

我使用jsonn对象加载对象之间的数据。目前正在使用工厂返回对象并将其绑定在控制器之间。现在我正在制作这样的副本:

var LevelsHere = $http.get("my.json")
          .success(function(data){
            var dataCopy = angular.copy(data);
            return dataCopy;
          });
return {
    all: function() {
      return LevelsHere;
    }
  };

这样可以正常工作,但我有一个按钮,我想调用此函数并刷新它,以便从my.json中获取一个干净的副本(因此任何更改都会被还原)。

只是为了澄清,在每个控制器中,我将其称为控制器内的范围,如此

UserService.all().then(function(data){
            $scope.storeHere= data.data;    
        });

我想也许类似于$ rootscope的东西可能是要走的路,因为我在控制器之间共享。所以 - 让控制器之间共享根范围(这是json的副本)。然后,当我按下我的刷新按钮时,它将使用my.json的新副本刷新$ rootscope,因此更改将恢复。

也许我可以使用我正在尝试的方法?我尝试让刷新按钮再次调用$ get,但它并没有绑定到两个位置,所以它只在一个控制器中刷新。

快速回顾 - 我有json我带2个控制器进入并使用工厂调用它。我希望能够刷新它,以便在两个地方刷新。

以下是我对刷新的尝试:

 $scope.cancelProcedure = function() {
        //refresh data
        UserService.all().then(function(data){
            $scope.levels = data.data;  

     };

问题在于它调用当前数据,并且不会使用新调用进行刷新。我不确定如何在两个地方刷新它。谢谢!

1 个答案:

答案 0 :(得分:1)

为了给你答案我假设如下:

  • 您希望获得一个资源my.json并不时更新。
  • 您想要访问和更新来自两个(或更多)控制器的数据
  • 您不想污染$rootScope

在这种情况下,理想的解决方案是存储方法以获取/更新工厂中的数据以及当前数据。在每个需要该数据的控制器中,只需注入工厂并将其分配给该控制器的$scope即可。

以下是一个例子:

angular.factory('dataFactory', ['$http', function ($http) {

  var dataFactory={};

  dataFactory.currentData = null;

  dataFactory.update = function () {
    return $http.get("my.json")
    .success(function(data){
      dataFactory.currentData = data;
      return data;
    });
  };

  return dataFactory;

}]);

angular.controller('firstCtrl', ['$scope', 'dataFactory', function ($scope, dataFactory) {
  $scope.data = dataFactory;
}]);

angular.controller('secondCtrl', ['$scope', 'dataFactory', function ($scope, dataFactory) {
  $scope.data = dataFactory;
}]);

在您的HTML中,您可以使用例如ng-bind="data.currentData"ng-click="data.update()"

进一步的想法:如果您不想将工厂放在控制器$scope中,您甚至可以考虑进一步细分逻辑并创建一个或两个基于该工厂的指令。但是,如果这对于给定的信息而言并不容易说明。