如何理解指令的`terminal`?(How to understand the `terminal

2019-07-21 03:43发布

在这个页面: http://docs.angularjs.org/guide/directive

指令定义对象

终奌站

如果设置为true,那么当前的首要任务将是最后一组将执行指令(未定义在当前优先权任何指示仍将执行上相同的优先级执行顺序)。

我不明白它做好。 什么是current priority是什么意思? 如果有这样的指令:

  1. 指令1与{优先权:1,终端:假}
  2. 指令2与{优先权:10,终端:假}
  3. 含{:100,终端:假优先} directive3
  4. directive4含{优先权:100,终端:真} //这是真的
  5. directive5含{优先权:1000,终端:假}

请注意, directive4具有terminal:true等都有false

如果有一个HTML标签有所有5个指令:

<div directive1 directive2 directive3 directive4 directive5></div>

什么是5个指令的执行顺序?

Answer 1:

优先

当你有一个元素上的多个指令优先级才有意义。 以什么顺序这些指令将被应用的优先级决定/启动。 在大多数情况下,你不会需要一个优先事项,但有时当你使用编译功能,你要确保你的编译功能,首先运行。

终奌站

终端属性也只对是相同的HTML元素指令相关。 也就是说,如果你<div my-directive1></div> <div my-directive2></div> priorityterminal在您的指示my-directive1my-directive2不会相互影响。 如果你有他们只会相互影响<div my-directive1 my-directive2></div>

终端属性告诉角跳过之后(低优先级)附带该元素的所有指令。 所以这个代码可能会清除掉:

myModule.directive('myDirective1', function() {
    return {
        priority: 1,
        terminal: false,
        link: function() {
            console.log("I'm myDirective1");
        }
    }
});

myModule.directive('myDirective2', function() {
    return {
        priority: 10,
        terminal: true,
        link: function() {
            console.log("I'm myDirective2");
        }
    }
});

myModule.directive('myDirective3', function() {
    return {
        priority: 100,
        terminal: false,
        link: function() {
            console.log("I'm myDirective3");
        }
    }
});

对于这一点,你只看到“我myDirective2”,并在控制台“我myDirective3”。

<div my-directive1 my-directive2 my-directive3></div>

但对于这一点,你会看到“我myDirective1”为好,因为它们是在不同的元素。

<div my-directive1></div>
<div my-directive2></div>
<div my-directive3></div>

原帖

在你的榜样,优先100和1000的指令都将得到应用唯一的,因为具有较高优先级的指令被首先应用,所以优先1000人会被首先应用。

如果在这种情况下有两个指令优先级100,他们都将被应用,因为指令具有相同的优先级顺序是不确定的。

请注意,这仅适用于那些在相同的元素指令。



文章来源: How to understand the `terminal` of directive?