我在指令中看到了很多:
compile: function(elm, attrs, transclude) {
return function postLink(scope, elm, attrs, tabsetCtrl) {
// do something with transclude function
}
}
我希望确认我的理解是它是一个弃用的表单,因为旧版本的Angular没有在链接函数中作为参数转换 并且它现在更好(更易读):
link: function (scope, elm, attrs, tabsetCtrl, transclude) {
// do something with transclude function
}
当没有其他编译功能时,这两者之间有什么区别吗? (我检查了代码示例,两种方式都是一样的,但也许有一些东西导致第一种形式比第二种更好)
答案 0 :(得分:0)
你仍然没有得到它。只有在需要预链接时才使用编译,并且只有在需要使用预链接时,才需要在编译任何子元素之前对范围执行一些准备工作。 这是一个例子: http://plnkr.co/edit/x9FeRULhjJVxGWDDfAkk?p=preview 我想向您介绍编译和链接函数之间的区别,以便您可以了解何时需要编译。因为在你的情况下编译不是必需的,它与链接相同,但在更新的角度你的回报
{
transclude: true,
compile: function(elm, attrs) {
// you can do transformation of element before link also here
// which you cannot do in link function eg.
elem.addClass('testclass');
// or like i did in example on link
elem.prepend('<span style="color:red;"> {{value}} </span> ');
return function(scope, elm, attrs, ctrl, transclude) {
}
}
}
但是在没有转换的示例中与链接函数
相同 {
transclude: true,
link: return function(scope, elm, attrs, ctrl, transclude) {
}
}
但是当你设置两个链接功能时都会被忽略。
它的反模式? 不,这不对。因为你可以在执行链接之前进行元素转换。