如何获取值在函数内部发生变化的varible的值,例如我的var total正在改变它在load:function里面的值,但是我想在系列名称中使用结果
var total = 0;
$scope.chartMedida = {
dataSource: {
load: function () {
var def = $.Deferred();
$http({ method: 'GET', url: ng.api + '/llantas/graficos/'+3}).success(function (data) {
def.resolve(data.data);
for(var i = 0; i<data.data.length; i++){
total = data.data[i].cantidad + total;
}
});
return def.promise();
}
},
palette: 'Soft',
series: {
argumentField: 'medida',
valueField: 'cantidad',
name:total.toString(),
type: 'bar'
},
title: {
text: 'Existencias por medida',
fontSize:4
},
tooltip: {
enabled: true
},
label: {
visible: true
}
};
我在for中获得了总变量的值,但是我无法显示它的值,在这个例子中,我在名称上使用它:total.toString(),请帮助最好答案
答案 0 :(得分:0)
试试这个
$scope.chartMedida = {
total:0,
dataSource: {
load: function () {
var def = $.Deferred();
$http({ method: 'GET', url: ng.api + '/llantas/graficos/'+3}).success(function (data) {
def.resolve(data.data);
for(var i = 0; i<data.data.length; i++){
$scope.chartMedida.total += data.data[i].cantidad;
}
});
return def.promise();
}
},
...
series: {
argumentField: 'medida',
valueField: 'cantidad',
name:$scope.chartMedida.total.toString(),
type: 'bar'
},
答案 1 :(得分:0)
试试这个
series: function() {
return {
argumentField: 'medida',
valueField: 'cantidad',
name:total,
type: 'bar'
}
}
这在测试页面上对我有用,但我不得不使用虚拟数据......
console.log($scope.chartMedida.series());
我认为内部值是在init上设置的,然后不会改变。通过这种方式,它可以在被要求时获得价值。
答案 2 :(得分:0)
这是一个解决方案。创建服务并让服务在返回get数据时设置值。
我已经制作了sample Plunker来演示设置。出于演示目的,我已经删除了处理逻辑,因为我的获取数据只是一个字符串。
var app = angular.module('plunker', []);
app.service('myService', function($http) {
this.dataSource = function(inObj) {
$http({
method: 'GET',
//url: ng.api + '/llantas/graficos/' + 3
url: 'myData.html'
})
.success(function(data) {
var total = "";
//for (var i = 0; i < data.data.length; i++) {
// total = data.data[i].cantidad + total;
//}
total = data;
inObj.chartMedida.series.name = total;
})
.error(function(data, status) {
alert("error" + data, status);
});
return "...waiting..."
};
});
app.controller('MainCtrl', function($scope, myService) {
$scope.chartMedida = {
palette: 'Soft',
series: {
argumentField: 'medida',
valueField: 'cantidad',
name: myService.dataSource($scope),
type: 'bar'
},
title: {
text: 'Existencias por medida',
fontSize: 4
},
tooltip: {
enabled: true
},
label: {
visible: true
}
};
});
答案 3 :(得分:0)
如果您不想创建服务,这是另一个答案。
这个设置了一个iife内联函数来做同样的事情。它看起来更加混乱。实际上,为chartMedida设置工厂并将其完全从控制器中取出会更加清洁。
app.controller('MainCtrl', function($scope, $http) {
$scope.chartMedida = {
palette: 'Soft',
series: {
argumentField: 'medida',
valueField: 'cantidad',
name: function() {
$http({
method: 'GET',
//url: ng.api + '/llantas/graficos/' + 3
url: 'myData.html'
})
.success(function(data) {
var total = "";
//for (var i = 0; i < data.data.length; i++) {
// total = data.data[i].cantidad + total;
//}
total = data;
$scope.chartMedida.series.name = total;
})
.error(function(data, status) {
alert("error" + data, status);
});
return "...waiting...";
}(),
type: 'bar'
},
title: {
text: 'Existencias por medida',
fontSize: 4
},
tooltip: {
enabled: true
},
label: {
visible: true
}
};
});