由于缺乏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
答案 0 :(得分:0)
删除$scope.$apply()
可以解决问题。
由于您在此使用的所有功能都来自AngularJS框架,因此您不必使用$scope.$apply()
。事实上,它甚至会使您的应用程序崩溃。这可能就是为什么它只能工作一次。
有关$scope.$apply()
AngularDoc
修改强> 您可能需要将插件选项refreshDataOnly设置为false。