2016-04-26 104 views
0

如果我们使用[]令牌设置属性或属性指令,Angular 2如何区分?他们看起来都一样。属性指令和元素属性语法之间的区别?

例如:

<div [count]="counter"></div> 
<div [ngClass]="setClasses()"></div> 

不会检查指令第一,如果不存在,那么将它解释为属性赋值?我很困惑。

我的意思是如果我们有一个名为“value”的属性和一个名为“value”的指令。 Angular2如何处理这个问题?

回答

1

首先它理解属性和属性之间的区别很重要。


- Properties and Attributes in HTML

如果角没有找到一个指令或组件,也没有它抛出一个 原生属性的@Input() - Can't bind to 'for' since it isn't a known native property angular2

角有属性和属性不同的结合语法绑定

[count]=...[ngClass]=...属性绑定。
属性绑定或者是 - count="someString" - attr.count="{{someProperty}}"或 - [attr.count]="someProperty"

+0

所以你的意思是Angular2首先检查是否存在这样的指令。如果不是,那么它将其作为属性。对? –

+0

实际上'[count]'和'[ngClass]'是属性绑定。属性绑定可以是'count =“someString”'或'attr.count =“{{someProperty}}”或'[attr.count] =“someProperty”'。原生DOM元素的属性可以按照相同的方式设置。 –

+0

如果一个元素具有本地属性(不属性,它们通常会从一个属性反射到另一个属性)Angular使用属性绑定语法来设置它。所以,是的,Angular会检查指令和组件以及原生属性,并将其值赋予它所发现的值。 –

0

目标名称始终是属性的名称,即使它看起来是别的名称。元素属性可能是更常见的目标,但Angular 先查看名称是否是已知指令的属性。
从技术上讲,Angular将名称与指令输入,指令输入数组中列出的属性名称之一或用@Input()装饰的属性相匹配。这些输入映射到指令自己的属性。

Template Syntax doc,部分 约束性指标

以上。


参见Why does simply [myHighlight]="..." work for an attribute directive?,在那里我问,为什么我们没有写<div ngClass [ngClass]="...">

相关问题