在本地存储$ http GET promise对象

时间:2015-07-23 20:37:54

标签: javascript json angularjs

由于缺乏Angular服务知识,我一直在试图弄清楚如何在我的图表上实现简单的数据更新。所有我想要的是做一个GET请求并在我的控制器上本地存储JSON对象,这样我就可以有(1)原始JSON来呈现原始图表和(2)基于用户输入的修改后的JSON(总是修改原始JSON)来呈现更新的图表。这是我的控制器:

`

angular.module('scattChartApp')
.controller('ChartCtrl', function($scope, $http, $cacheFactory) {

  $http.get('chartConfig.json').success(function(response) {
    $scope.options = response.options;
    $scope.data = response.data;
    $scope.initData = angular.copy($scope.data);
  });



  $scope.update = function(user){
    var a, b, c, d, e;
    a = user.a; b = user.b; c = user.c; d = user.d; e = user.e;
    var data = $scope.data;
    if(a !== "" && b !== "" && c !== "" && d !== "" && e !== ""){
      for(var i = 0; i<$scope.data.length; i++){
          for(var j = 0; j<$scope.data[i].values.length; j++){
              var x = $scope.data[i].values[j].x;
              var y = $scope.data[i].values[j].y;
              var z = $scope.data[i].values[j].size;
              data[i].values[j].x = a*x + b*y;
              data[i].values[j].y = c*x + d*y;
              data[i].values[j].size = e*e*z;
          }
      }
      $scope.$apply();
    }
  };

  $scope.reset = function(){ 
    $scope.user = {};
    $scope.data = angular.copy($scope.initData);
    $scope.$apply();
  }; 

});`

这是我的plunker(如果你做了正确的输入,按下更新将相应缩放,但只有一次,其余的将不起作用):http://plnkr.co/edit/n4bDl7LYoylW5tWbRA6g?p=preview

1 个答案:

答案 0 :(得分:0)

删除$scope.$apply()可以解决问题。

由于您在此使用的所有功能都来自AngularJS框架,因此您不必使用$scope.$apply()。事实上,它甚至会使您的应用程序崩溃。这可能就是为什么它只能工作一次。

有关$scope.$apply() AngularDoc

的更多信息

修改 您可能需要将插件选项refreshDataOnly设置为false。