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

时间:2015-01-19 21:28:33

标签: angularjs angularjs-directive angularjs-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);
        }
    }
});            

因此,如果在ngRepeat中使用compile:更简洁,效率更高,为什么人们建议使用$compile

1 个答案:

答案 0 :(得分:1)

我不知道是谁建议的。每个都有自己的用途。

指令的compile函数运行一次以定义并返回指令的前后链接函数,并且通常用于在首次编译指令时修改模板。

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