编译函数只返回postLink - 它是反模式吗?

时间:2014-02-15 09:46:57

标签: javascript angularjs angularjs-directive

我在指令中看到了很多:

 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
      }

当没有其他编译功能时,这两者之间有什么区别吗? (我检查了代码示例,两种方式都是一样的,但也许有一些东西导致第一种形式比第二种更好)

1 个答案:

答案 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) {

    }
 }

但是当你设置两个链接功能时都会被忽略。

它的反模式? 不,这不对。因为你可以在执行链接之前进行元素转换。

Burn