我对AngularJS很新。有没有人可以用适当的例子来解释这些差异(&,@和=)。&vs @ and = in angularJS有什么区别
回答
@
允许在指令属性中定义的值被传递到该指令的分离范围。该值可以是简单的字符串值(myattr="hello"
),也可以是带嵌入表达式的AngularJS插入字符串(myattr="my_{{helloText}}"
)。将其视为从父范围到子指令的“单向”通信。 John Lindquist有一系列简短的视频短片解释每一个。 @上的屏幕视频位于:https://egghead.io/lessons/angularjs-isolate-scope-attribute-binding
&
允许指令的隔离范围将值传递到父级作用域以在属性中定义的表达式中进行评估。请注意,指令属性隐含地是一个表达式,并且不使用双重大括号表达式语法。这一个更难以在文本中解释。 Screencast on & is here: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
+1;强烈推荐Egghead.io视频 – 2013-02-16 18:07:33
这些链接看起来已经改变,他们现在是: 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,分别。 – Samih 2014-10-17 10:35:13
感谢您的标注,我用正确的URL更新了我的答案。 – 2014-11-19 21:04:01
不是我的小提琴,但http://jsfiddle.net/maxisam/QrCXh/显示差异。的关键部分是:
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:'&'
}
我想从JavaScript原型继承的角度解释了概念。希望有助于理解。
有三个选项来定义一个指令范围:
scope: false
:角默认。该指令的范围恰好是其父范围(parentScope
)之一。scope: true
:Angular为此指令创建了一个范围。示波器原型从parentScope
继承。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
的方案。
它通常用于不同页面共享的一些常见组件,如Modals。一个独立的范围可以防止污染全球范围,并且很容易在页面之间共享。
以下是基本指令:http://jsfiddle.net/7t984sf9/5/。以示出的图像是:
@
:单向结合
@
只是简单地传递从parentScope
到isolatedScope
财产。它被称为one-way binding
,这意味着您不能修改parentScope
属性的值。如果你熟悉JavaScript继承,你可以很容易地理解这两个场景:
如果绑定属性是基本类型,比如上例中
interpolatedProp
:您可以修改interpolatedProp
,但parentProp1
不会改变。但是,如果更改parentProp1
的值,则interpolatedProp
将被新值覆盖(当角度$摘要时)。如果绑定属性是一些对象,像
parentObj
:自所述一个传递到isolatedScope
是一个参考,修改值将触发此错误:TypeError: Cannot assign to read only property 'x' of {"x":1,"y":2}
=
:双双向绑定
=
被称为two-way binding
,这意味着childScope
中的任何修改也会更新va在parentScope
中,反之亦然。此规则适用于基元和对象。如果将parentObj
的绑定类型更改为=
,则会发现可以修改parentObj.x
的值。一个典型的例子是ngModel
。
&
:功能结合
&
允许指令调用一些parentScope
功能,并通过在从指示一定的价值。例如,检查JSFiddle: & in directive scope。
定义一个可点击的模板的指令,如:
<div ng-click="vm.onCheck({valueFromDirective: vm.value + ' is from the directive'})">
,并使用指令,如:
<div my-checkbox value="vm.myValue" on-check="vm.myFunction(valueFromDirective)"></div>
变量valueFromDirective
从指令到父控制器通过{valueFromDirective: ...
通过。
默认情况下,指令使用共享作用域。如果指令具有'范围:真',那么它使用继承范围,其中子可以看到父属性,但父母不能看到子内部属性。 – YuMei 2015-07-24 18:27:11
** AngularJS - 隔离作用域 - @ VS = VS&** ---------- 与解释短的例子可在下面的链接: http://www.codeforeach.com/angularjs/angularjs-isolated-scopes-vs-vs – 2017-06-27 17:25:21
我花了很长一段时间地狱真正得到这个句柄。对我来说,关键是要理解“@”是用于你想要在现场进行评估并作为常量传递给指令的东西,其中“=”确实传递了对象本身。
有,说明这一点这在一个不错的博客文章:http://blog.ramses.io/technical/[email protected]&-and-=-when-declaring-directives-using-isolate-scopes
删除最终的斜杠('/')使网址正常工作。 – 2016-06-02 22:31:21
AngularJS - 隔离斯科普斯 - @ VS = VS &
与解释简短的例子可在下面的链接:
http://www.codeforeach.com/angularjs/angularjs-isolated-scopes-vs-vs
@ - 单程结合
在指令:
scope : { nameValue : "@name" }
鉴于:
<my-widget name="{{nameFromParentScope}}"></my-widget>
= - 双向结合
在指令:
scope : { nameValue : "=name" },
link : function(scope) {
scope.name = "Changing the value here will get reflected in parent scope value";
}
鉴于:
<my-widget name="{{nameFromParentScope}}"></my-widget>
& - 函数调用
在指令:
scope : { nameChange : "&" }
link : function(scope) {
scope.nameChange({newName:"NameFromIsolaltedScope"});
}
鉴于:
<my-widget nameChange="onNameChange(newName)"></my-widget>
- 1. Seq.iter vs - 有什么区别?
- 2. http_basic_authenticate_with AND authenticate_or_request_with_http_basic有什么区别?
- 3. 'and,or'和'&&,||'有什么区别?
- 4. sjlj vs dwarf vs seh有什么区别?
- 5. 有什么区别:to和=> in rails
- 6. INTERSECT和WHERE IN有什么区别?
- 7. .replace和-replace in powershell有什么区别?
- 8. Knockout.js observableArray vs Backbone.js Collection - 有什么区别?
- 9. AddHandler vs. Handles - 有什么区别?
- 10. 有什么区别?
- 11. JAVA:逻辑AND/OR和短路AND/OR有什么区别?
- 12. 有什么区别
- 13. angularjs和angular cli有什么区别?
- 14. angularjs和dust.js有什么区别?
- 15. Application.FileDialog vs GetOpenFilename:有什么区别?
- 16. new XMLHttpRequest()vs new XMLHttpRequest - 有什么区别?
- 17. JSONLoader vs ObjectLoader,有什么区别? (three.js)
- 18. 'while(true)`vs`while(\ true)`有什么区别?
- 19. NSTimer.CreateScheduledTimer vs CreateTimer - 有什么区别?
- 20. javax.ws.rs.core.Cookie vs javax.ws.rs.core.NewCookie,有什么区别?
- 21. 有什么区别? #header.h1 Vs:#header h1
- 22. Handler vs runOnUiThread有什么区别?
- 23. IntegratedWindowsAuthentication vs Negotiate有什么区别?
- 24. img.height vs img.style.height有什么区别?
- 25. log4j RollingFileAppender vs DailyRollingFileAppender有什么区别
- 26. boost :: static_pointer_cast vs boost :: shared_static_cast有什么区别?
- 27. UnityEngine.Events.Unityaction vs System.Action有什么区别?
- 28. WPF Panel.Children vs Panel.InternalChildren - 有什么区别?
- 29. XElement Nodes()vs Elements()有什么区别?
- 30. AppBarLayout vs toolbar有什么区别?
参见http://stackoverflow.com/questions/14050195/what-是指示范围内的差异 – 2013-02-16 18:10:39