Javascript 如何获取函数中值发生变化的变量的值

Javascript 如何获取函数中值发生变化的变量的值,javascript,jquery,angularjs,function,variables,Javascript,Jquery,Angularjs,Function,Variables,如何获取函数中值发生变化的变量的值例如,我的var total在load:函数中改变它的值,但我想在序列名中使用结果 var total = 0; $scope.chartMedida = { dataSource: { load: function () { var def = $.Deferred(); $http({ method: 'GET', url: ng.api + '/llantas/graficos

如何获取函数中值发生变化的变量的值例如,我的var total在load:函数中改变它的值,但我想在序列名中使用结果

 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
    }


};
var总计=0;
$scope.chartMedida={
数据源:{
加载:函数(){
var def=$.Deferred();
$http({method'GET',url:ng.api+'/llantas/graficos/'+3})。成功(函数(数据){
定义解析(data.data);
对于(var i=0;i试试这个

$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: function() {
    return {
        argumentField: 'medida',
        valueField: 'cantidad',
        name:total,
        type: 'bar'
    }
}
这在测试页面上对我有效,但我必须使用虚拟数据

console.log($scope.chartMedida.series());

我认为内部值是在init上设置的,然后不会更改。这样,当请求时它会得到值。

这里有一个解决方案。创建一个服务,并让服务在返回get数据时设置值

我做了一个演示来演示设置。为了演示的目的,我去掉了处理逻辑,因为我的get数据只是一个字符串

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
    }
  };
});
var-app=angular.module('plunker',[]);
app.service('myService',函数($http){
this.dataSource=函数(inObj){
$http({
方法:“GET”,
//url:ng.api+'/llantas/graficos/'+3
url:'myData.html'
})
.成功(功能(数据){
var total=“”;
//对于(var i=0;i
如果您不想创建服务,这里有另一个答案

这一个设置了一个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
    }
  };
});
app.controller('MainCtrl',函数($scope,$http){
$scope.chartMedida={
调色板:“软”,
系列:{
argumentField:“medida”,
valueField:“cantidad”,
名称:函数(){
$http({
方法:“GET”,
//url:ng.api+'/llantas/graficos/'+3
url:'myData.html'
})
.成功(功能(数据){
var total=“”;
//对于(var i=0;i
Set
series.total
在Ajax回调中。我猜Felix的意思是
series.name
,但你应该已经理解了他的意思(var I=0;iNope不工作“无法读取未定义的属性'total'”让我看得更深入一点
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
    }
  };
});