2015-03-31 47 views
2

这里的HTML:AngularJS - 为什么ng-click处理程序不被触发?

<tr data-ng-repeat="a in assignments" data-ng-click="vm.handleAssignmentClicked()"> 
     ... 
    </tr> 

下面是相关的指令和控制:

angular 
    .module('app.assignments') 
    .directive('stfrAssignments', assignmentsDirective) 
    .controller('AssignmentsController', AssignmentsController); 

function assignmentsDirective() { 
    var directive = { 
     restrict: 'E', 
     templateUrl: 'components/assignments/assignments.html', 
     scope: { 
      assignments: '=' 
     }, 
     controller: 'AssignmentsController', 
     controllerAs: 'vm' 
    }; 
    return directive; 
} 

function AssignmentsController() { 
    var vm = this; 

    function handleAssignmentClicked() { 
     console.log('handleAssignmentClicked'); 
    } 
} 

当我点击的分配(在表中的行),该handleAssignmentClicked()功能不会被调用。我应该在哪里寻找问题?

+0

@SoluableNonagon指令***是***使用'controllerAs:'vm''已经在这个代码 – Claies 2015-03-31 21:08:13

回答

5

更新:正如评论指出的那样,父指令(我们认为正在使用)使用controllerAs语法,这在第二点[2]中得到了解决。我留下第一个信息。

[1]除非使用contoller as controllerName语法,否则控制器中的this关键字与其$scope不同。

你可以在你的控制器注入$scope

function AssignmentsController($scope) { 
    $scope.handleAssignmentClicked() { 
    console.log('handleAssignmentClicked'); 
    } 
} 

[2]或者,这是你的情况:

<div ng-controller="AssignmentsController as assignCtrl"> 
... 
    <tr data-ng-repeat="a in assignCtrl.assignments" data-ng-click="assignCtrl.handleAssignmentClicked()"> 

而在你的控制,你会用this使功能访问:

this.handleAssignmentClicked = function() { ... } 
+0

代码***是***使用'controllerAs:'vm'' .... – Claies 2015-03-31 21:09:20

+0

@Claies的确,所以我们陷入我的第二种情况下,该函数应该被分配给'this' – floribon 2015-03-31 21:13:18

+0

(我已经根据你的评论更新了我的答案,谢谢你指出了这个) – floribon 2015-03-31 21:15:11

相关问题