angularjs - Angular 图表不会随着数据变化而更新

标签 angularjs angular-chart

我有一个Angular Chart bar 应该在从 servlet 检索 JSON 数据的 ng-click 事件上更新。问题是,即使 $scope 上的数据已更新,图表也不会反射(reflect)更新。为什么会发生这种情况?有没有办法手动重绘图表?我在 Angular Chart 网站上找不到太多文档。

编辑:根据要求,我还附加了模板,这是否与我在两个不同的 div 上拥有相同的 Controller 有关?

    <div class="row" ng-controller="mygraphcontroller as chart">
        <!-- other things -->
        <a ng-click="applyFilterGraph()" class="btn btn-lg btn-primary btn-raised">Apply</a>
        <!-- other things -->
    </div>

    <div class="row">
        <div class="col-md-12" ng-controller="mygraphcontroller as chart">
            <div class="panel panel-default">
                <div class="panel-heading">*****</div>
                <div class="panel-body">
                    <canvas id="bar" class="chart chart-bar" data="data" labels="labels"></canvas>   
                </div>
            </div>
        </div>
    </div>

app.controller('mygraphcontroller', ['$scope', '$http', '$log', function($scope,$http,$log) {

    $scope.labels = [];
    $scope.data = [];

    // THE FOLLOWING POST WORKS FINE ON RUNTIME

    $http({
        method: 'POST',
        url: '/myservlet', 
        params: { param1: 'param1' }
    }).success(function(result) {

        var slabels = [];
        var array = [];
        var sdata = [array];

        for (var i = 0; i < result.length; i++) {
            slabels.push(result[i].company.companyDescription);
            array.push(result[i].value);
        }

        $scope.labels.push.apply($scope.labels,slabels);
        $scope.data.push.apply($scope.data,sdata);

    }).error(function(result) {
    });

    // THIS ONE DOES NOT WORK, CHART IS NOT UPDATED

   $scope.applyFilterGraph = function() {

        $scope.labels = [];
        $scope.data = [];


        $http({
            method: 'POST',
            url: '/myservlet', 
            params: { param2: 'param2' }
        }).success(function(result) {

        var slabels = [];
        var array = [];
        var sdata = [array];

        for (var i = 0; i < result.length; i++) {
            slabels.push(result[i].company.companyDescription);
            array.push(result[i].value);
        }

        $scope.labels.push.apply($scope.labels,slabels);
        $scope.data.push.apply($scope.data,sdata);

        }).error(function(result) {
        });

    };

最佳答案

看起来这要么是命名问题,要么是 Controller 绑定(bind)到模板的方式问题

尝试将 ng-controller="mygraphcontroller Chart" 更改为 ng-controller="mygraphcontroller"

您还将其绑定(bind)到两个不同的 div,尝试将其绑定(bind)到覆盖整个文件的一个,即设置为 ng-controller="mygraphcontroller" 的顶级 div

关于angularjs - Angular 图表不会随着数据变化而更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30668146/

相关文章:

javascript - 聚焦功能在 Angular 上不起作用

javascript - 如何使用 Angular 图表?

angularjs - 如何在 angular-chart.js 饼图中制作自定义图例

javascript - 类型错误 : Cannot read property 'datasets' of undefined - Angular Chart

javascript - Angular HTTP 拦截器没有命中错误函数

javascript - AngularJs 将 HTML 中每个 ng-repeat 的实例传递给指令

angularjs - 如何将 Angular 2 与 NetBeans 一起使用?

javascript - 共享范围变量未跨指令更新

javascript - angular-chart.js legendCallback

javascript - angular-chart.js 中的水平条形图