Зачем мне $compile, когда `compile:` вроде бы работает нормально
Проверьте http://jsfiddle.net/3jvoL4ew/
(Примечание: я знаю, что это можно сделать с template:
это не мой вопрос, хотя)
Он содержит директиву, которая добавляет кнопку и текст к элементу, на котором она используется:
app.directive("otcDynamic", function ($compile) {
return {
compile: function(element) {
var template = "<button ng-click='doSomething()'>{{label}}</button>";
element.append(template);
}
}
});
Это работает, но обычным способом определения такой директивы является:
app.directive("otcDynamic", function ($compile) {
return {
link: function (scope, element) {
var template = "<button ng-click='doSomething()'>{{label}}</button>";
var linkFn = $compile(angular.element(template));
var content = linkFn(scope);
element.append(content);
}
}
});
Так что если использовать compile:
является более кратким и более эффективным при использовании в ngRepeat, почему люди рекомендуют использовать $compile
?
1 ответ
Я не знаю, кто что рекомендует. У каждого свое использование.
Директива compile
Функция запускается один раз, чтобы определить и вернуть функции до и после ссылки директивы, и, как правило, предназначена для изменения шаблона при первой компиляции директивы.
$compile
service можно использовать для компиляции и компоновки некоторого содержимого, которое директива получает динамически, даже после того, как директива была создана.