Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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 用新图表数据更新d3.js Angular指令会导致无限摘要?_Javascript_Angularjs_D3.js_Infinite Loop - Fatal编程技术网

Javascript 用新图表数据更新d3.js Angular指令会导致无限摘要?

Javascript 用新图表数据更新d3.js Angular指令会导致无限摘要?,javascript,angularjs,d3.js,infinite-loop,Javascript,Angularjs,D3.js,Infinite Loop,我在Angular中有一个d3.js图表指令,它需要更新提供的最新数据。似乎发生的是,Angular在从我的服务器发送新数据时抛出了一个infinite digest错误(为什么?) 指示 指令HTML绑定 我在这里没有看到我的错误,据我所知,除了必要的时候,没有什么应该重新触发摘要。我犯了什么错误?是因为手表被多次调用。你能检查一下它被调用了多少次吗。删除手表会删除无限摘要。。。但是我没有办法更新图表数据。第二个请求,我不知道怎么做。你能在控制台上检查oldvalue和newvalue$wat

我在Angular中有一个d3.js图表指令,它需要更新提供的最新数据。似乎发生的是,Angular在从我的服务器发送新数据时抛出了一个
infinite digest
错误(为什么?)

指示 指令HTML绑定
我在这里没有看到我的错误,据我所知,除了必要的时候,没有什么应该重新触发摘要。我犯了什么错误?

是因为手表被多次调用。你能检查一下它被调用了多少次吗。删除手表会删除无限摘要。。。但是我没有办法更新图表数据。第二个请求,我不知道怎么做。你能在控制台上检查oldvalue和newvalue$watch('data',函数(newvalue,oldvalue)吗更详细地说,通过将第3个参数设置为true,您正在进行深度监视。希望您这样做是有目的的。我看不到任何东西会在这段代码中第一眼看到无限摘要。但是您应该提供
呈现
函数的内容。如果该函数正在更改
数据
,这将触发infinite digest.您是否可以在手表中对render()调用进行注释并检查,如果render调用正在更改“data”中的任何属性,它将再次调用手表,并且可能会无限地调用手表,这可能会导致无限摘要问题
(function() {
    var app = angular.module('app');

    app.directive('chart', ["$window", function($window) {
        return {
            replace: true,
            restrict: 'E',
            scope: {
                data: '=',
                settings: "="
            },
            link: function($scope, elem, attrs) {

                $scope.$watch('data', function(newValue) {
                    render(newValue);
                }, true);

                function render(data) {
                    // complex d3 manipulation here
                }

            },
            templateUrl: '/js/templates/chart.html'
        }
    }]);
})();
<chart class="dataplot" data="telemetryPlots.altitudeVsTime.data" settings="telemetryPlots.altitudeVsTime.settings" width="100%" height="400px"></chart>
(function() {
    var app = angular.module('app', []);

    app.controller('myController', ["$scope", "myService", "telemetryPlotCreator", function($scope, myService, telemetryPlotCreator) {

        (function() {
            missionService.telemetry($scope.slug).then(function(response) {
                $scope.telemetryPlots = {
                    altitudeVsTime: telemetryPlotCreator.altitudeVsTime(response.data)
                }
            });

        })();
    }]);

    app.service('telemetryPlotCreator', [function() {
        this.altitudeVsTime = function(telemetryCollection) {
            return {
                data: telemetryCollection.filter(function(telemetry) {
                    return telemetry.altitude != null;
                }).map(function(telemetry) {
                    return { timestamp: telemetry.timestamp, altitude: telemetry.altitude };
                }),
                settings: {
                    extrapolate: true,
                    xAxisKey: 'timestamp',
                    xAxisTitle: 'Time (T+s)',
                    yAxisKey: 'altitude',
                    yAxisTitle: 'Altitude (km)',
                    chartTitle: 'Altitude vs. Time',
                    yAxisFormatter: function(d) {
                        return d / 1000;
                    }
                }
            }
        };
    }]);

    app.service('myService', ["$http", function($http) {
        // http service
    }]);
})();