官方Angular documentation for compile讨论了单向绑定类型<
。
在Angular 社区中,我看到@
通常被称为“单向绑定类型”。
是什么给出的? @
在我看来并不是真正的单向绑定,因为它只是评估表达式并设置字符串。 <
似乎与=
更相似,但绑定只是单向。
我的猜测是最近引入了<
,这可以解释为什么@
曾被称为单向绑定类型。 (它有点是,但不完全)
希望有更多Angular经验的人可以为我做好准备! :)
更新:@aaronmallen commented并确认最近添加了<
(Angular 1.5)。
为了进一步说明问题,我应该何时使用@
vs <
?
答案 0 :(得分:10)
@ binding将父级的文字值绑定到隔离范围。所以你可以这样做:
<cat name="Fluffy" age="12"></cat>
您可以将此视为一种绑定方式。因为你绑定了一个文字,所以数据不会再回来了,因为它没有任何内容可以分配给它。
在旧版Angular(&lt; 1.5)中,当我们想要单向绑定时,我们使用了@
加上curlies {{}}
。在运输之前,curlies将表达式转换为文字,因此我们传入了一个文字:
<cat name="{{$ctrl.catName}}" age="{{$ctrl.catAge}}"></cat>
因为花括号表达式被计算为文字,然后作为文字传递给指令。数据无法再次恢复,因为curlies已经被评估为字符串,因此没有任何数据可以分配给。
您仍会在许多教程中找到此方法。它现在已经过时了,你应该避免使用它。
在1.5中我们得到<
绑定。这让我们在没有curlies的情况下单向绑定。我们现在可以这样做:
<cat name="$ctrl.catName" age="$ctrl.catAge"></cat>
与=
绑定不同,如果孤立值发生变化,则更改不会反映在父级中。效果是一样的,但语法更好。
答案 1 :(得分:3)
如果您对未重新评估该值感兴趣,可以在视图中使用一次性绑定:
<span>{{::foo}}</span>
https://docs.angularjs.org/guide/expression#one-time-binding
但要专门回答你的问题'&lt;'绑定是在Angular 1.5中引入的,实质上意味着如果将属性传递给指令然后在控制器中更新它,它将不会在指令中更新。 '@'绑定用于专门传递字符串值,它不一定单向绑定值。
来源: