Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular.js在使用d3.layout.partition时给出最大调用堆栈大小错误_Javascript_Angularjs_D3.js - Fatal编程技术网

Javascript Angular.js在使用d3.layout.partition时给出最大调用堆栈大小错误

Javascript Angular.js在使用d3.layout.partition时给出最大调用堆栈大小错误,javascript,angularjs,d3.js,Javascript,Angularjs,D3.js,我已经创建了一个angularjs指令,它创建了一个d3日暴图。问题是我在chrome中不断得到最大的调用堆栈错误,在firefox中得到过多的递归错误。我已经跟踪到函数d3.layout.partition的问题。现在,这是d3.js提供的一个函数,用于插入值以创建sunburst图表或任何层次结构图表。我目前不知道如何解决这个问题。如有任何建议,将不胜感激 谢谢 铬误差 火狐错误 var partition = d3.layout.partition() .chi

我已经创建了一个angularjs指令,它创建了一个d3日暴图。问题是我在chrome中不断得到最大的调用堆栈错误,在firefox中得到过多的递归错误。我已经跟踪到函数d3.layout.partition的问题。现在,这是d3.js提供的一个函数,用于插入值以创建sunburst图表或任何层次结构图表。我目前不知道如何解决这个问题。如有任何建议,将不胜感激

谢谢

铬误差

火狐错误

      var partition = d3.layout.partition()
        .children(function(d){ return d.values; })
        .value(function(d) { console.log(d); return d.count; });            

      var root = d3.nest()
            .key(function(k){ return k.key})
            .entries(d);

      root = {key:'All',values:root};

      console.log(partition.nodes(root))

partition.nodesroot导致递归错误

虽然我无法真正说出问题的原因,因为您没有显示足够的代码,但我过去经常遇到此问题,但我通过以下方法解决了此问题

将d3代码放入控制器而不是指令

如果您决定在指令中包含d3代码,请在第一次监视之后删除监视程序。要做到这一点,你可以从

原因:


虽然有很多教程显示将d3代码放入指令中,因为它们操作DOM,但我个人认为,在控制器中放入d3代码可能更合适,因为我仍然严重依赖d3而不是angularjs来操作DOM。当然,我不能百分之百肯定,因为我不久前才开始使用AngularJS。

也许一个简单的例子可以更好地解释它。我用截图和代码片段编辑了这个问题,我怀疑digestTtl可能是原因,默认设置为10。请稍等,我已尝试将digestTtl设置为高数值。你能在小提琴上或别的什么地方准备好整个装置吗?我可以在那里看看。
            var unbindWatcher = $scope.$watch(
                "clickCount",
                function( newClickCount ) {
                    console.log( "Watching click count." );
                    if ( newClickCount >= 5 ) {
                        $scope.isShowingFeedback = true;
                        unbindWatcher(); }
                       }
                  });