【问题标题】:In Angular: are the compile function's pre and post methods the same as link's pre and post在 Angular 中:编译函数的 pre 和 post 方法是否与链接的 pre 和 post 方法相同
【发布时间】:2016-01-27 01:23:23
【问题描述】:

在 Angular 指令的编译函数中有一个 pre 和 post。这个pre和post真的和link功能一样吗?

例如在下面的代码中,链接函数是否与它下面的编译函数的 pre 和 post 相同(如果你愿意,可以使用快捷方式)?

链接

....
link: {
  pre: function(scope, elem, attr) {
   //stuff
  },
  post: function(scope, elem, attr) {
  //stuff
  }    
}
....

编译...

  ....
  compile: function(tElem, tAttrs){
    return {
      pre: function(scope, iElem, iAttrs){
      //stuff
      },
      post: function(scope, iElem, iAttrs){
      //stuff
      }
    }
  }
  .....

【问题讨论】:

    标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat


    【解决方案1】:

    首先运行编译(通常是您处理“模板”dom 元素的地方)。链接是第二个运行的,通常是您将指令附加到 $scope 的位置。

    它们也以特定的顺序运行,因此您可以在设计需要一些“父”指令设置才能正常运行的指令时使用这一事实(如 tr:td 之类的东西)。

    有一个really great article 是关于编译时间和链接的,您可以查看一下以获得更清晰的信息。

    另外 - 您可能会喜欢 very low level stack answer to a similar question(请注意,它不是第一个列出的,而是最受好评的)。

    那么,有什么区别?

    那么编译前/后链接是否与链接功能“相同”?由你决定。

    如果您在指令上定义编译,框架会忽略您的链接函数(因为编译函数应该返回前/后链接函数)。

    有点像link 重载compile.postLink 和link.pre 重载compile.preLink。

    【讨论】:

    • 当这个问题突然出现在我脑海中时,您发布的文章是我真正看到的文章。所以我只需要更多的“是”或“否”来回答我的问题和假设
    • 所以“编译前/后与链接前/后相同”?只是捷径?没有;-)
    • 很公平。我只是懒惰。添加到答案,因为它并不真正适合评论。
    • 发生这种重载时,您是否知道发生了什么不同的事情(即添加了任何其他功能),因为应该只是从编译返回 pre 和 post?
    【解决方案2】:

    当这种重载发生时,您是否知道发生了任何不同的事情(即添加了任何其他功能),因为应该只是从编译返回 pre 和 post?

    如果您查看source code, 当$directiveProvider 注册指令时,如果缺少compile 属性并且link 属性存在,它会创建一个compile 属性,它是一个返回link 属性的空函数。

    所以答案是编译函数返回的链接函数和DDO的link属性提供的链接函数是一样的。没有添加其他功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 2015-11-10
      • 1970-01-01
      • 2017-01-31
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多