隔离范围成员在链接/控制器中更新,但在传递给控制器​​时未定义

时间:2014-07-31 22:27:31

标签: javascript angularjs angularjs-directive

我有以下代码:

HTML:

<body ng-controller="MainCtrl">
    <main-dir data="data" on-update-map="updateMap(datalength)"></main-dir>
</body>

JS:

app.directive('mainDir', function () {
    function DatasetDirective() {
        var directive = {};
        directive.restrict = "E";
        directive.replace = false;
        directive.scope = {
            data: "=",
            onUpdateMap: "&"
        };
        directive.templateUrl = 'dataset.html';
        directive.controller = function($scope){
          // set "datalength" on scope based on some logic here
          $scope.datalength = $scope.data.length;
          console.log($scope);
        };

        return directive;
    }
    return DatasetDirective();
});

dataset.html

<div>
    <button ng-click="onUpdateMap()">click me</button>
</div>

plnkr就在这里

基本上,我试图在指令的隔离范围上设置成员。然后单击指令模板中的按钮,我在主控制器上执行包含指令的函数,并将隔离范围的成员传递给函数。我希望将“3”传递给函数,但它的计算结果是“未定义”

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您需要从模板中传递datalength作为键值对,基本上您期望的任何参数的名称应作为指令的键提供。

<button ng-click="onUpdateMap({datalength:datalength})">click me</button>

<强> Plnkr