Зачем мне $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 можно использовать для компиляции и компоновки некоторого содержимого, которое директива получает динамически, даже после того, как директива была создана.

Другие вопросы по тегам