如果我们使用[]令牌设置属性或属性指令,Angular 2如何区分?他们看起来都一样。属性指令和元素属性语法之间的区别?
例如:
<div [count]="counter"></div>
<div [ngClass]="setClasses()"></div>
不会检查指令第一,如果不存在,那么将它解释为属性赋值?我很困惑。
我的意思是如果我们有一个名为“value”的属性和一个名为“value”的指令。 Angular2如何处理这个问题?
如果我们使用[]令牌设置属性或属性指令,Angular 2如何区分?他们看起来都一样。属性指令和元素属性语法之间的区别?
例如:
<div [count]="counter"></div>
<div [ngClass]="setClasses()"></div>
不会检查指令第一,如果不存在,那么将它解释为属性赋值?我很困惑。
我的意思是如果我们有一个名为“value”的属性和一个名为“value”的指令。 Angular2如何处理这个问题?
首先它理解属性和属性之间的区别很重要。
见
- 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"
。
从 Template Syntax doc,部分 约束性指标目标名称始终是属性的名称,即使它看起来是别的名称。元素属性可能是更常见的目标,但Angular 先查看名称是否是已知指令的属性。
从技术上讲,Angular将名称与指令输入,指令输入数组中列出的属性名称之一或用@Input()装饰的属性相匹配。这些输入映射到指令自己的属性。
以上。
参见Why does simply [myHighlight]="..." work for an attribute directive?,在那里我问,为什么我们没有写<div ngClass [ngClass]="...">
。
所以你的意思是Angular2首先检查是否存在这样的指令。如果不是,那么它将其作为属性。对? –
实际上'[count]'和'[ngClass]'是属性绑定。属性绑定可以是'count =“someString”'或'attr.count =“{{someProperty}}”或'[attr.count] =“someProperty”'。原生DOM元素的属性可以按照相同的方式设置。 –
如果一个元素具有本地属性(不属性,它们通常会从一个属性反射到另一个属性)Angular使用属性绑定语法来设置它。所以,是的,Angular会检查指令和组件以及原生属性,并将其值赋予它所发现的值。 –