What is the difference between & vs @ and = in angularJS
我对安古拉基斯很陌生。有人能解释一下这些AngularJS操作符的区别吗:当用适当的例子隔离作用域时,
集合A上
这里是一个教程,终于和表演在所有三种单视图:http:////egghead.io教训angularjs株审查范围
我想从JavaScript原型继承的角度来解释这些概念。希望有助于理解。
定义指令范围有三个选项:
指定
1 2 3 4 5 6 7 | app.directive("myDirective", function() { return { scope: { ... // defining scope means that 'no inheritance from parent'. }, } }) |
它通常用于不同页面共享的一些常见组件,如模态。一个独立的范围可以防止污染全球范围,并且很容易在页面之间共享。
下面是一个基本指令:http://jsfidle.net/7t984sf9/5/。要说明的图像是:
如果绑定属性是原始类型,如示例中的
interpolatedProp :您可以修改interpolatedProp ,但parentProp1 不会被更改。但是,如果更改EDOCX1的值(28),EDOCX1的值(26)将被新值覆盖(角度为$digest)。如果绑定属性是某个对象,如
parentObj :由于传递给isolatedScope 的对象是引用,修改该值将触发此错误:TypeError: Cannot assign to read only property 'x' of {"x":1,"y":2}
在指令中定义可单击的模板,如:
1 |
使用如下指令:
1 |
变量
参考:了解范围
不是我的小提琴,但jsfiddle.net http:/ / / / / maxisam qrcxh显示差分。关键件是:
1 2 3 4 5 6 7 8 | scope:{ /* NOTE: Normally I would set my attributes and bindings to be the same name but I wanted to delineate between parent and isolated scope. */ isolatedAttributeFoo:'@attributeFoo', isolatedBindingFoo:'=bindingFoo', isolatedExpressionFoo:'&' } |
@:单向绑定
=:双向绑定
&;:函数绑定
AngularJS–独立范围–@vs=vs&;
下面的链接提供了带解释的简短示例:
http://www.codeforeach.com/angularjs/angularjs-isolate-scopes-vs-vs
@–单向绑定
指令:
1 | scope : { nameValue :"@name" } |
鉴于:
1 | <my-widget name="{{nameFromParentScope}}"></my-widget> |
=–双向绑定
指令:
1 2 3 4 | scope : { nameValue :"=name" }, link : function(scope) { scope.name ="Changing the value here will get reflected in parent scope value"; } |
鉴于:
1 | <my-widget name="{{nameFromParentScope}}"></my-widget> |
&;–函数调用
指令:
1 2 3 4 | scope : { nameChange :"&" } link : function(scope) { scope.nameChange({newName:"NameFromIsolaltedScope"}); } |
鉴于:
1 | <my-widget nameChange="onNameChange(newName)"></my-widget> |
我花了很长时间才真正明白这一点。对我来说,关键是理解"@"是指那些您希望就地计算并作为常量传递到指令中的内容,其中"="实际上传递对象本身。
在http://blog.ramses.io/technical/angularjs上有一篇很好的博客文章解释了这一点:当使用隔离作用域声明指令时,-@-&;-和-=-之间的区别