我创建了一个指令,在单击按钮时添加一行表格以添加到指令的级别 - 更准确地说是最后一列的按钮。我希望当单击此按钮时,方法在我的控制器中,然后调用
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");
}
});
答案 0 :(得分:1)
这有点令人惊讶,但它没有terminal: true
。似乎terminal:true
停止编译指令的模板,即使它是应用于元素的唯一指令。查看此plnkr以查看其是否有效。
来自docs:
终端
如果设置为true,则当前优先级将是最后一组 将执行的指令(当前优先级的任何指令 仍将按相同优先级的执行顺序执行 未定义)。注意表达式和其他指令 指令的模板也将被排除在执行之外。
还报告了here。
您需要terminal: true
吗?如果是这样,您的指令可能必须编译其内容。查看this answer。