Angularjs ng-click不会在指令内部触发

时间:2017-05-31 16:59:48

标签: angularjs directive angularjs-ng-click

我创建了一个指令,在单击按钮时添加一行表格以添加到指令的级别 - 更准确地说是最后一列的按钮。我希望当单击此按钮时,方法在我的控制器中,然后调用

    myapp.directive("newCandidat", function() {
        return {
            restrict : "E",
            template : "<tr>"+
                          "<td><input  class='form-control' value='' disabled='disabled'></td>"+
                          "<td><input  class='form-control' value='' disabled='disabled'></td>"+
                          "<td><input  class='form-control' value=''></td>"+
                          "<td><button ng-click='method()'>click</button></td>"+
                        "</tr>",
            replace: true,
            transclude:true,
            terminal: true,
            scope:{method:'&'},
            link: function(scope, element, attrs) {
                console.log(element);
              }

        };
    });

    myapp.controller("Controller",function($scope,$compile){
        $scope.addCand=function(){
            angular.element($("#candList")).append($compile("<new-candidat method='clickMe()'><new-candidat>")($scope));
        }
        $scope.clickMe=function(){
           console.log("Click me"); 
        }
    });

1 个答案:

答案 0 :(得分:1)

这有点令人惊讶,但它没有terminal: true。似乎terminal:true停止编译指令的模板,即使它是应用于元素的唯一指令。查看此plnkr以查看其是否有效。

来自docs

  

终端

     

如果设置为true,则当前优先级将是最后一组   将执行的指令(当前优先级的任何指令   仍将按相同优先级的执行顺序执行   未定义)。注意表达式和其他指令   指令的模板也将被排除在执行之外。

还报告了here

您需要terminal: true吗?如果是这样,您的指令可能必须编译其内容。查看this answer