AngularJS指令:链接和编译function是否一起工作?
我对这个function有一些疑问。
可以说我有这个指令:
.directive('hello', function () { return { template: '<div>Hello <span ng-transclude></span></div>', restrict: 'E', transclude: true, compile: function() { console.log('Compile()'); return { pre: function() { console.log('PreLink()'); }, post: function() { console.log('PostLink()'); } }; }, link: function postLink(scope, element, attrs) { console.log('Link()'); } }; }
我把它添加到我的模板中:
<hello>World</hello>
控制台日志:
Compile() PreLink() PostLink()
那么为什么link()
不被调用?
如果不是从compile()
返回一个对象,我返回一个打印PreLink()
控制台日志的函数:
Compile() PreLink()
如果我不从Compile()
返回任何东西,控制台日志:
Compile()
仍然link()
没有被调用。
如果我只是评论Compile()
然后Link()
最后打印:
Link()
有人可以解释这一切吗? Link()
和Compile()
意味着一起工作? 我应该只使用编译的PreLink()
和PostLink()
?
link
和compile
不一起工作,没有。
在指令定义对象中,如果只定义了link
,就像在preLink
函数中使用代码一样,具有一个空的preLink
函数的空compile
函数的postLink
。 只要你定义compile
, link
被angular度忽略,因为编译应该返回链接function。
如果您只从compile
返回一个函数,那么它将在后链接中执行。
或者换句话说, link
只是通过compile
链接后调用的postLink
函数的快捷方式。
这是(有点) 在这里logging – 看代码示例中的意见。
几天前,Jurgen Van de Moere发表了一篇很好的文章,内容是“AngularJS指令中编译和链接函数的基本特性”。 它对compile
, pre-link
post-link
function的职责和顺序做了相当清晰的解释。
http://www.jvandemo.com/contenthttp://img.dovov.com2014/Aug/cycle-2.png
你一定要检查出来: http : //www.jvandemo.com/the-nitty-gritty-of-compile-and-link-functions-inside-angularjs-directives