AngularJS - 为什么没有触发ng-click处理程序?

时间:2015-03-31 20:58:54

标签: angularjs angularjs-directive angularjs-ng-click

这是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()函数。我应该在哪里寻找问题?

1 个答案:

答案 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() { ... }