【问题标题】:nvd3 angular directive error: [$rootscope:infdig] 10 $digest() iterations reached. abortingnvd3 角度指令错误:[$rootscope:infdig] 达到了 10 个 $digest() 迭代。中止
【发布时间】:2015-04-03 21:34:32
【问题描述】:

nvd3 angular error: [$rootscope:infdig] 10 $digest() iterations reached. aborting!

我在使用 nvd3 angular 指令时遇到了这个错误。当您从视图中修改模型时,会发生此错误。但我不认为我正在这样做。

代码如下:

//controller

var options = getChartOptions();
var data = getChartData();

$scope.chart = {
    data: data,
    options: options
};

//view

<nvd3 class="metrics-chart" options="chart.options" data="chart.data"></nvd3>

这是完整的控制器:

var options = getChartOptions();
var data = getChartData();

$scope.chart = {
    data: data,
    options: options
};

function getChartOptions(){
    return ChartConfigService.getChartOptions();
}


function getChartData(){
    var data = [];
    var colors = {
        'GET': '#f00',
        'POST': '#0f0',
        'PUT': '#00f',
        'DELETE': '#ff0'
    };

    var verbs = ['GET', 'POST', 'PUT', 'DELETE'];

    verbs.forEach(function(verb){
        var i = 0;
        var values = [];
        var now = moment();

        while ( i < 10 ) {
            values.push({
                x: moment(now).add(i, 'minutes'),
                y: Math.round(Math.random() * 10)
            });

            i++;
        }

        data.push({
            values: values,      //values - represents the array of {x,y} data points
            key: verb, //key  - the name of the series.
            color: colors[verb]  //color - optional: choose your own line color.
        });
    });

    return data;
}

【问题讨论】:

    标签: angularjs nvd3.js angularjs-nvd3-directives


    【解决方案1】:

    这个错误的发生是由于选项中的一些未指定的属性默认分配不正确,并且是不断变化的。在我的情况下,它是高度。当我在选项中指定它时,错误消失了

    【讨论】:

      【解决方案2】:

      您的服务看起来可以在这里创建一个新对象:

      ChartConfigService.getChartOptions();
      

      如果是这样……

      问题: Afaik 将会有一个新的观察者在那个新的对象上导致另一个 $digest-cycle。我猜指令“nvd3”在“选项”上使用双向数据绑定,并试图再次解决它,导致另一个递归调用:

      ChartConfigService.getChartOptions();
      

      解决方案: 不要在里面返回一个新的对象:

      ChartConfigService.getChartOptions();
      

      -- 或者--

      // var options = getChartOptions();
      // function getChartOptions(){ ... }
      var options = ChartConfigService.getChartOptions();
      

      -- 或者--

      var optionsData = ChartConfigService.getChartOptions();
      function getChartOptions(){
          return optionsData;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-14
        • 2015-11-11
        • 1970-01-01
        • 2018-11-21
        • 1970-01-01
        • 2015-05-03
        • 1970-01-01
        • 2016-02-25
        相关资源
        最近更新 更多