从angularjs的文档中,在定义指令时,postLink
中有compile
,postLink
中有link
myModule.directive('directiveName', function factory(injectables) {
var directiveDefinitionObject = {
priority: 0,
template: '<div></div>',
templateUrl: 'directive.html',
replace: false,
transclude: false,
restrict: 'A',
scope: false,
compile: function compile(tElement, tAttrs, transclude) {
return {
pre: function preLink(scope, iElement, iAttrs, controller) { ... },
post: function postLink(scope, iElement, iAttrs, controller) { ... }
}
},
link: function postLink(scope, iElement, iAttrs) { ... }
};
return directiveDefinitionObject;
});
他们之间有什么区别?我注意到postLink
中的link
的参数小于compile
中的参数。还有其他区别吗?
答案 0 :(得分:30)
它们没有什么不同,你所拥有的只是文档中的伪代码。 postLink函数是最重要的函数,因此有多种方法可以声明它。
以下是Plunker作为示例......
...这里有一些伪代码,显示了postLink函数的不同声明:
app.directive('dir1', function () {
return function(scope, elem, attr) {
//this is the same
};
});
app.directive('dir2', function () {
return {
link: function(scope, elem, attr) {
//this is the same
}
};
});
app.directive('dir3', function () {
return {
compile: function compile(tElement, tAttrs, transclude) {
return {
post: function postLink(scope, elem, attrs) {
//this is the same
}
}
}
};
});
......你只需要一个。
答案 1 :(得分:0)
本质区别在于,在预链接功能中,子元素尚未链接。但是在后链接功能中,它有。
这对DOM操作有影响。由于链接过程可能会进一步操纵DOM,因此只有当子节点已经链接时,才能安全地操作DOM - 这只适用于后链接函数。