AngularJS中的&、@和=有什么区别?

30 浏览
0 Comments

AngularJS中的&、@和=有什么区别?

我非常新手 AngularJS。有人可以用适当的示例为我解释这些 AngularJS 运算符之间的区别:&、@ 和 =,当隔离作用域时。

admin 更改状态以发布 2023年5月22日
0
0 Comments

我希望从JavaScript原型继承的角度解释概念,希望有所帮助。

指令的作用域有三种选项:

  1. scope: false:Angular默认值。指令的作用域恰好是其父作用域(parentScope)。
  2. scope: true:Angular为此指令创建一个作用域。该作用域是从parentScope原型继承的。
  3. scope: {...}:下面将解释隔离作用域。

指定scope: {...}定义了一个isolatedScope。一个isolatedScope不会从parentScope继承属性,尽管isolatedScope.$parent === parentScope。它通过以下方式定义:

app.directive("myDirective", function() {
    return {
        scope: {
            ... // defining scope means that 'no inheritance from parent'.
        },
    }
})

isolatedScope无法直接访问parentScope。但有时指令需要与parentScope进行通信。它们通过@=&进行通信。使用符号@=&的主题讨论的是使用isolatedScope的场景

它通常用于不同页面共享的一些常见组件,例如模态框。隔离作用域可以防止污染全局作用域,易于在页面之间共享。

这是一个基本的指令:http://jsfiddle.net/7t984sf9/5/。下面是一张插图:

enter image description here

@: 单向绑定

@ 简单地把属性从 parentScope 传递到 isolatedScope。它被称为 单向绑定,这意味着你不能修改 parentScope 的属性值。如果你熟悉 JavaScript 的继承,你可以很容易理解下面的两种情况:

  • 如果绑定的属性是原始类型,比如例子中的 interpolatedProp:你可以修改 interpolatedProp,但是 parentProp1 并不会改变。然而,如果你改变了 parentProp1 的值,在 Angular 的 $digest 时,interpolatedProp 会被覆盖为新的值。

  • 如果绑定的属性是对象,比如例子中的 parentObj:因为传递到 isolatedScope 的引用值,修改该值将触发以下错误:

    TypeError: Cannot assign to read only property 'x' of {"x":1,"y":2}

=: 双向绑定

= 被称为 双向绑定,这意味着在 childScope 中进行的任何修改都会更新到 parentScope 中的值,反之亦然。这个规则适用于原始类型和对象。如果你把 parentObj 的绑定类型改为 =,你会发现你可以修改 parentObj.x 的值。一个典型的例子是 ngModel

&: 函数绑定

& 允许指令调用一些 parentScope 函数,并从指令中传入一些值。例如,查看 JSFiddle: & in directive scope

在指令中定义一个可点击的模板:


使用指令如下:


变量valueFromDirective通过{valueFromDirective: ...从指令传递给父控制器。

参考文献:理解作用域

0
0 Comments

@ 会允许一个定义在指令属性上的值传递到指令的隔离作用域中。这个值可能是一个简单的字符串值(myattr="hello"),也可能是一个带有嵌入式表达式的 AngularJS 插值字符串(myattr="my_{{helloText}}")。将其视为从父作用域向子指令的 "单向" 通信。 John Lindquist 有一系列简短的短片解释每个部分。关于 @ 的短片在这里:https://egghead.io/lessons/angularjs-isolate-scope-attribute-binding

& 允许指令的隔离作用域将值传递到父作用域中,以便在属性定义的表达式中进行求值。请注意,指令属性是隐含的表达式,不使用双花括号表达式语法。这一个更难以用文字解释。有关 & 的短片在这里:https://egghead.io/lessons/angularjs-isolate-scope-expression-binding

= 建立起指令的隔离作用域和父作用域之间的双向绑定表达式。对子作用域的更改会传播到父作用域,反之亦然。将 = 视为 @ 和 & 的组合。关于 = 的短片在这里:https://egghead.io/lessons/angularjs-isolate-scope-two-way-binding

最后,这里是一个短片,展示了这三种方式在单个视图中一起使用:https://egghead.io/lessons/angularjs-isolate-scope-review

0