如果我們使用[]令牌設置屬性或屬性指令,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會檢查指令和組件以及原生屬性,並將其值賦予它所發現的值。 –