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

最佳答案

更新:正如注释中指出的那样,父指令(我们假定正在使用)正在使用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() { ... }

关于angularjs - AngularJS-为什么不触发ng-click处理程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29378455/

10-11 05:10