所有
[更新] :得到this post的答案(这需要时间阅读,所以我只是引用一个简单的答案我对这篇文章的理解 ):
"请注意,如果您需要编译功能和链接功能(或预先 和后链接函数),编译函数必须返回链接 功能因为'链接'如果'编译' 属性已定义。"
我是AngularJS指令的新手,当我学习如何使用$ compile时,我遇到了一个问题,例如:
我可以定义一个指令:
app.directive("customdir", function(){
return {
restrict:"AE",
compile: function(tmplEL, attrs){
return function(scope, EL, attrs){/*this is the link function*/};
},
link: function(scope, EL, attrs){/*this is also the link function*/}
}
})
我的困惑在于:编译函数返回一个链接函数,同时我们可以在指令中定义另一个链接函数,它们是相同的函数还是它们与link: function(scope, EL, attrs)
不同的函数可以覆盖link function returned from compile
?
结果是什么如果我同时定义了?
由于
答案 0 :(得分:1)
它是"或/或"。
您可以在指令声明对象上定义compile
属性,该属性是一个返回link
函数/对象的函数 - 然后忽略link
属性。
compile: function(tElement, tAttrs, transclude){
return {
pre: function prelink(){...},
post: function postlink(){...}
};
}
或者,由于compile
函数不太常用,您可以指定link
属性 - 可以是后链接函数(如果它是函数值)或两者都预先-link和post-link,如果它是包含以下字段的对象值:
link: {
pre: function prelink(scope, element, attrs, ctrls, transclude){
},
post: function postlink(scope, element, attrs, ctrls, transclude){
}
}
或者简单地说:
link: function postlink(scope, element, attrs, ctrls, transclude){
}
Angular docs
中的更多信息