将控制器传递给angularJS中的指令。给出未定义的错误

时间:2015-07-22 18:12:11

标签: javascript angularjs angular-ui-bootstrap

我正在使用ui-bootstrap为我的指令添加模态,并在前一个指令上做得很好。我不相信我在这个方面做了不同的事情,但当我从内部运行 edit()函数时,我得到 ReferenceError:milestoneController未定义指令。

milestone.html (这是下面指令的模板HTML)

<div ng-controller = "milestoneController"></div>

里程碑指令:

angular.module('ireg').directive('milestone', function (milestoneFactory,$modal) {
     return {
        restrict:'E',
        scope: {             
            objectid:'@objectid'
        },
        templateUrl: '/ireg/components/milestone/milestone.html',

        link: function ($scope, element, attrs) {

            $scope.edit = function(data) {
                milestoneController.editMilestoneDialog(data);
            };

        }

    }
});

angular.module('ireg').controller('milestoneController', function ($scope, $modal){
   $scope.editMilestonesDialog = function (objectid) {
        //fun
   }
});

编辑:我也觉得我应该提一下里程碑指令在ng-repeat循环中重复。谢谢!

1 个答案:

答案 0 :(得分:1)

好的,你想要在你的指令中使用一个transcluded范围来将控制器函数传递给指令。您的指令现在变为:

angular.module('ireg').directive('milestone', function (milestoneFactory,$modal) {
     return {
        restrict:'E',
        scope: {             
            objectid:'@objectid',
            editMilestoneDialog:'&'
        },
        templateUrl: '/ireg/components/milestone/milestone.html',

        link: function ($scope, element, attrs) {

        $scope.edit = function(data) {
            $scope.editMilestoneDialog(data);
        };

    }

}

并且您的标记变为:

<milestone edit-milestone-dialog="editMilestoneDialog"></milestone>