【问题标题】:Are the link functions differernt in directive compile returning and link function?指令编译返回和链接函数中的链接函数是否不同?
【发布时间】:2015-03-23 16:29:17
【问题描述】:

全部:

[更新]:得到this post的回答(阅读需要时间,所以我只是引用我对那篇帖子的理解的简单回答):

"注意如果你需要一个编译函数和一个链接函数(或pre 和发布链接函数),编译函数必须返回链接 函数,因为如果 'compile' 会忽略 'link' 属性 属性已定义。”

我对 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?

如果我同时定义了两个,结果是什么?

谢谢

【问题讨论】:

标签: angularjs angularjs-directive


【解决方案1】:

这是一个“非此即彼”。

您可以在指令声明对象上定义compile 属性,这是一个返回link 函数/对象的函数 - 然后link 属性将被忽略。

compile: function(tElement, tAttrs, transclude){
  return {
    pre: function prelink(){...},
    post: function postlink(){...}
  };
}

或者,由于compile 函数不太常用,您可以只指定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

【讨论】:

  • 感谢您的帮助。看了帖子,终于搞明白了compile返回的link func和指令attr中的定义之间的关系。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 2020-08-23
  • 1970-01-01
  • 2014-03-11
相关资源
最近更新 更多