2016-04-26 113 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]="...">

相關問題