指令编译返回和链接功能中的链接功能是否不同?

时间:2015-03-23 16:29:17

标签: angularjs angularjs-directive

所有

[更新] :得到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

结果是什么如果我同时定义了

由于

1 个答案:

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

中的更多信息