Angular指令

时间:2016-08-04 20:56:27

标签: angularjs angularjs-directive

官方Angular documentation for compile讨论了单向绑定类型<

在Angular 社区中,我看到@通常被称为“单向绑定类型”。

是什么给出的? @在我看来并不是真正的单向绑定,因为它只是评估表达式并设置字符串。 <似乎与=更相似,但绑定只是单向。

我的猜测是最近引入了<,这可以解释为什么@曾被称为单向绑定类型。 (它有点是,但不完全)

希望有更多Angular经验的人可以为我做好准备! :)

更新:@aaronmallen commented并确认最近添加了<(Angular 1.5)。

为了进一步说明问题,我应该何时使用@ vs <

2 个答案:

答案 0 :(得分:10)

根据您拥有的版本

,有两种方法可以在Angular 1.x中进行单向绑定

&LT; 1.5

@ binding将父级的文字值绑定到隔离范围。所以你可以这样做:

<cat name="Fluffy" age="12"></cat>

您可以将此视为一种绑定方式。因为你绑定了一个文字,所以数据不会再回来了,因为它没有任何内容可以分配给它。

在旧版Angular(&lt; 1.5)中,当我们想要单向绑定时,我们使用了@加上curlies {{}}。在运输之前,curlies将表达式转换为文字,因此我们传入了一个文字:

<cat name="{{$ctrl.catName}}" age="{{$ctrl.catAge}}"></cat>

因为花括号表达式被计算为文字,然后作为文字传递给指令。数据无法再次恢复,因为curlies已经被评估为字符串,因此没有任何数据可以分配给。

您仍会在许多教程中找到此方法。它现在已经过时了,你应该避免使用它。

1.5 +

在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中引入的,实质上意味着如果将属性传递给指令然后在控制器中更新它,它将不会在指令中更新。 '@'绑定用于专门传递字符串值,它不一定单向绑定值。

来源: