无法从nvd3-angularjs中的控制器访问$ scope.api

时间:2015-12-24 08:44:14

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

我正在尝试使用Angular-JS中的NVD3 Box Charts。我希望在控制器中更改数据时更新图表。

要更新图表,我需要使用以下行

$scope.api.updateWithData($scope.data);

但是,在我的控制器中,我无法访问 $ scope.api

但是,如果我按照Plunker-Example中提供的应用和控制器定义方法或Question中的应用和控制器定义方法,则效果非常好。

我想问题在于我定义App和Controller的方式。

我希望使用以下方法。你能帮帮我吗

HTML-DIV

<div ng-controller="MyController">    

<nvd3 options="options" data="data" api="api" config="{refreshDataOnly: true}"> </nvd3>
</div>

App Def

(function () {
'use strict';
angular
    .module('app', ['ngRoute', 'ngCookies', 'smart-table', 'ui.bootstrap', 'ngFileUpload', 'angular-img-cropper','nvd3'])
    .config(config)
    .run(run);

config.$inject = ['$routeProvider', '$locationProvider'];
function config($routeProvider, $locationProvider) {
}

run.$inject = ['$rootScope', '$location', '$cookieStore', '$http'];
function run($rootScope, $location, $cookieStore, $http) {
}

})();

控制器默认

(function () {
'use strict';
angular
    .module('app')
    .controller('MyController', MyController);

MyController.$inject = ['UserService', '$rootScope', '$scope', '$cookieStore', 'AuthenticationService'];
function MyController(UserService, $rootScope, $scope, $cookieStore, AuthenticationService) {       
var vm = this;      
$scope.data = [ ];      

    // D3 JS Data
    $scope.options = {
        chart: {
            type: 'boxPlotChart',
            height: 450,
            margin : {
                top: 20,
                right: 20,
                bottom: 60,
                left: 40
            },
            color:['darkblue', 'darkorange', 'green', 'darkred', 'darkviolet'],
            x: function(d){return d.label;},
            // y: function(d){return d.values.Q3;},
            useInteractiveGuideline: true,
            transitionDuration:500, 
            maxBoxWidth: 75,
            yDomain: [0, 300]
        }
    };

    $scope.btnDisplayData = function() {

        // $scope.getOpParamsAcrossSites();
        $scope.data = [
        {
        label: "Sample A",
        values: { 
            Q1: 180,
            Q2: 200,
            Q3: 250,
            whisker_low: 115,
            whisker_high: 400,
            outliers: [50, 100, 425]
            }
        },
        {
        label: "Sample B",
        values: {
            Q1: 180,
            Q2: 200,
            Q3: 250,
            whisker_low: 115,
            whisker_high: 400,
            outliers: [50, 100, 425]
            }
        }
        ];
        $scope.api.updateWithData($scope.data);
        $scope.$apply();            
    }       
}})();

0 个答案:

没有答案