当 `compile:` 似乎工作正常时,为什么我需要 $compile

Why do I need $compile when `compile:` seems to work fine

查看 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);
        }
    }
});            

所以如果在ngRepeat中使用compile:更简洁,效率更高,为什么人们推荐使用$compile

我不知道谁推荐了什么。各有各的用处。

指令的compile函数运行一次定义和return指令的pre-和post-link函数,一般用于修改模板时该指令首先被编译。

可以使用 $compile 服务来编译和 link 指令即使在创建指令后动态接收的一些内容。