为什么在指令中使用范围以及如何使用它?

时间:2014-09-09 13:16:20

标签: angularjs angularjs-directive scope

我看到很多例子https://docs.angularjs.org/guide/directiveWhat is the difference between & vs @ and = in angularJS,但即使我不理解指令中的范围原则。使用它非常令人困惑。一些示例使用scope:true;

scope: {
     sourceObj: '=',
     lookupSource: '@',
     searchRes: '&',
     disableSearch: ''
}

什么使用布尔值(scope:true;)完全正确?

2 个答案:

答案 0 :(得分:1)

所有关于是否要为指令创建隔离(新)范围或者想要从父范围继承该范围。指定范围:true与范围基本相同:{}。它只是说,嘿,我想要自己的私人范围'。这两者之间的唯一区别是您可以使用对象表示法来指定您在指令中使用的范围属性。

答案 1 :(得分:1)

  1. scope:true

  2. 如果设置scope:true(而不是scope:{...}),则原型继承将用于该指令。 这不是AngularJS正在做的事情 - 这就是JavaScript原型继承的工作原理。 example

    1. scope:false(默认)

    2. 该指令不会创建新范围,因此这里没有继承。这很容易,但也很危险,因为例如,指令可能会认为它正在范围内创建新属性,而实际上它正在破坏现有属性。对于编写旨在作为可重用组件的指令,这不是一个好的选择。 example

      1. scope: {......}

      2. 该指令创建一个新的隔离/隔离范围。它没有原型继承。在创建可重用组件时,这通常是您的最佳选择,因为该指令不会意外地读取或修改父作用域。

        注意,即使父作用域的名称为“Harry”,指令中的textbox也是空白。这是因为新的Isolated范围对其父范围一无所知。 example

        注意,即使父作用域的名称为“Harry”,指令中的textbox也是空白。这是因为新的隔离范围对其父范围一无所知。

        注意:我现在不想要在范围属性(@,&,=)之间发布差异,这将是另一个教训

        来自此来源