为什么回调函数无法识别指令控制器?

时间:2015-08-18 12:57:55

标签: angularjs angularjs-directive

我正在尝试使用自己的控制器获取指令:

http://jsfiddle.net/edwardtanguay/xfbgjun5/14/

然而,当我点击按钮时:

var template = '<button ng-click="vm.addItem()">add item</button>'+
               '<ul><li ng-repeat="item in vm.items">{{item}}</li></ul>';

它告诉我:

Error: vm.add is not a function

即使我定义controllerAsbindToController

return {
  restrict: 'A',
    scope: {
        datasource: '=',
        add: '&'
    },
    controller: controller,
    controllerAs: 'vm',
    bindToController: true,
    template: template        
};

并从主控制器传入范围方法:

<div item-menu datasource="customers" add="addCustomer()"></div>

为什么它不会将add识别为vm上的函数?

ADDENDUM:控制器如下所示:

.controller('mainController', function ($scope) {
    $scope.customers = ['First','Second','Third'];
    $scope.score = 0;
    $scope.addCustomer = function() {
        $scope.score++;
    }
})

2 个答案:

答案 0 :(得分:2)

您可以在blog post

中找到问题的答案

如果使用Angular 1.3,则需要在指令中添加以下代码行:

4

查看博客文章和代码段。

答案 1 :(得分:0)

绑定到属性时,必须将其绑定到&,而不是绑定到控制器。

$scope

http://jsfiddle.net/xfbgjun5/15/