我的指令中的链接功能有以下功能:
var add_todos = function(todos) {
html += "<ul>";
for (var i = 0; i < todos.length; i++)
{
html += '<li> <input type="checkbox">'+ todos[i].title;
add_todos(todos[i].children);
html += '</li>';
}
html += "</ul>";
};
然后我使用element.replaceWith(html)
。这一切都很好,但我想在复选框中使用ng-if
。但是,如果我只是html += '<li> <input type="checkbox" ng-click="myFunction()">'+ todos[i].title;
,它就不会起作用,因为html
不再以角度进行评估。
我知道如果我使用模板,它会评估ng-click()
,但我不知道如何在保持链接功能的同时使用模板。我一直在考虑让angularJS将html
视为模板,这意味着它会评估ng-click()
。但是,我不知道如何做到这一点。当然,欢迎使用其他更有效的方法也是受欢迎的。
答案 0 :(得分:2)
您应该使用$compile
服务:
var add_todos = function(todos) {
var html = '…';
var myListElement = $compile(html)($scope);
element.replaceWith(myListElement);
};
但请不要过度使用$compile
。在您的示例中,带有ngRepeat
的模板似乎是一个好主意!