首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用terminal: true而不是删除低优先级指令?

为什么使用terminal: true而不是删除低优先级指令?
EN

Stack Overflow用户
提问于 2013-09-24 05:59:26
回答 2查看 5K关注 0票数 6

相关:How to understand the terminal of directive?

为什么有人会在指令上设置terminal: true和优先级,而不是简单地删除优先级较低的指令?例如,他们可以这样写:

代码语言:javascript
复制
<tag directive-1 directive-2 directive-3></tag>

..。并且它们可以将优先级: 100和终端: true添加到指令-3,以便只将指令-3应用于元素。

为什么不把他们的模板改成:

代码语言:javascript
复制
<tag directive-3></tag>

也许在某些情况下,它允许将多个指令添加到一个元素中,并卸载决定哪些指令实际应用于Angular的工作,从而简化了代码?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-09-25 13:03:49

设置优先级和终端选项并不是要删除指令,而是要声明编译和链接的顺序。每个人都指出ng-repeat是优先级+终端+转接的主要例子,所以我将给出一个非常简化的ng-repeat版本:

代码语言:javascript
复制
app.directive('fakeRepeat', function($log) {
  return {
    priority: 1000,
    terminal: true,
    transclude: 'element',
    compile: function(el, attr, linker) {
      return function(scope, $element, $attr) {
        angular.forEach(scope.$eval($attr.fakeRepeat).reverse(), function(x) {
          var child = scope.$new();
          child[attr.binding] = x;
          linker(child, function(clone) {
            $element.after(clone);
          })
        })
      }
    }
  }
});

伪的repeat指令可以这样使用:

代码语言:javascript
复制
<ul>
  <li fake-repeat="things" binding="t" add-letter>{{ t }}</li>
<ul>

现在可以将额外的指令附加到包含伪repeat的同一个li上,但是它们的优先级+终止选项将决定谁首先被编译,以及何时发生链接。通常,我们希望克隆li元素,并为每个绑定重复复制add-letter指令,但只有当add-letter的优先级低于t -repeat时,才会发生这种情况。

情况1:添加字母优先级为0

对生成的每个li执行链接。

案例2:添加字母优先级为1001

链接在伪重复之前执行,因此在transclude发生之前执行。

情况3:添加字母优先级为1001,终端为true

编译在fake-repeat之前停止,因此指令永远不会执行。

下面是一个带有控制台日志的plunker,可供进一步探索。

票数 5
EN

Stack Overflow用户

发布于 2014-02-12 14:27:37

我相信terminal是用来处理使用转译的指令,或者是替换所有元素内容的指令。

如果一个元素使用terminal,那么它不希望在初始指令集合期间编译适用的指令。初始收集由Angular的引导过程或手动$compile触发。因为终端指令不想编译优先级较低的指令,并不意味着它不想让指令在以后运行,这就是为什么transclude是一个完美的用例。

内容被编译并存储为链接函数,可以在任何时间针对任何范围进行计算。这就是ngRepeat和ngIf的表现。

当编写一个使用transclusion的指令时,可以考虑是否也应该使用terminal。

我不认为它在与不使用transclude的指令一起使用时是非常有用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18969610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档