将数据从指令发送到控制器

时间:2017-11-15 09:37:40

标签: angularjs angularjs-directive angularjs-controller

如何将数据从指令发送到控制器? 我试过了:http://jsfiddle.net/1xfvuotL/2/ 但是,我有这个错误:

  

未捕获的TypeError:无法读取属性' methodToCall'未定义的   在formateData

我的指示:

search.directive('donutChartScope', function () {
return {
    restrict: 'E',
    template: '<div style="position:absolute"></div>',
    replace: true,
    scope: {
        title: '@',
        width: '@',
        height: '@',
        data: '=',
        objx: '='        
    },
    link: function (scope, element) {

        formateData = function (data, scope) {
            var categorie = data.momsCategorie;
            if (categorie == 'Hors Production') {
                var obj = 'HorsProd';
            }
            else if (categorie == 'Production') {
                var obj = 'Prod';
            }
            else if (categorie == 'Enseigne') {
                var obj = 'Enseigne';
            }
            var array = [];
            var i = 0;
            $.each(scope[obj].Ok, function(idx, elm) {
                array.push([scope[obj].Ok[i].Hostname, scope[obj].Ok[i].NMON, scope[obj].Ok[i].ATR]);
                i++;
            });
            scope.objx.methodToCall(array);
            console.log(array);
        }

[...]

scope.chart = Highcharts.chart(element[0],
                        {
                            chart: {
                                type: 'pie'
                            },
                            title: {
                                text: '',
                                style: {
                                    display: 'none'
                                }
                            },
                            subtitle: {
                                text: '',
                                style: {
                                    display: 'none'
                                }
                            },
                            plotOptions: {
                                pie: {
                                    shadow: false,
                                    center: ['50%', '50%'],
                                    point: {
                                        events: {
                                            click: function (event) {
                                                formateData(this, scope.data[0].drilldown.array);
                                            }
                                        }
                                    }
                                }
                            },

我的控制器:

search.controller('NmonCustomController', function (config, $http, $compile, $q, $scope, query, $mdDialog, $timeout, $rootScope) {

$scope.objx = {};
$scope.objx.methodToCall = function(i) {
    console.log(i);
}

提前感谢您帮助我并抱歉我的英语

1 个答案:

答案 0 :(得分:0)

scope.objx.methodToCall(array);

此行中的

范围变量指向传递给formateData函数的参数,它不引用链接函数中的范围变量。

确保在formateData函数调用中传递正确的范围变量,或将变量名称更改为其他变量名称。