这是HTML:
<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 :(得分:5)
更新:正如评论所指出的那样,父指令(我们假设正在使用)使用的是controllerAs
语法,这在第二点[2]中得到了解决。 。我留下第一个信息。
[1]控制器中的this
关键字与其$scope
不同,除非您使用contoller as controllerName
语法。
您可以在控制器中注入$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() { ... }