從數據源到視圖目標:javascript
{{expression}} [target]="expression" bind-target="expression"
從視圖目標到數據源:java
(target)="statement" on-target="statement"
[(target)]="expression" bindon-target="expression"
import { Component } from '@angular/core'; @Component({ selector: 'app-root', template: ` <h1>{{title}}</h1> <h2>My favorite hero is: {{myHero}}</h2> ` }) export class AppComponent { title = 'Tour of Heroes'; myHero = 'Windstorm'; }
通常來講,括號間的素材是一個模板表達式,Angular 先對它求值,再把它轉換成字符串。
嚴格來說,插值表達式是一個特殊的語法,Angular 把它轉換成了屬性綁定,後面將會解釋這一點。
編寫模板表達式所用的語言看起來很像 JavaScript。
JavaScript 中那些具備或可能引起反作用的表達式是被禁止的,包括:express
和 JavaScript語 法的其它顯著不一樣包括:安全
<button [disabled]="isUnchanged">Save</button>
再學習屬性綁定以前,先來弄懂兩個概念attribute與property:app
屬性綁定是經過 property 來工做的,而不是 attribute
模板語法爲那些不太適合使用屬性綁定的場景提供了專門的單向數據綁定形式。curl
形式:[attr. attribute]="statement"學習
<button [attr.aria-label]="help">help</button>
2.class
形式:[class]="statement" / [class.className]="statement"字體
<div class="bad curly special" [class]="badCurly">Bad curly</div> //綁定到特定的類名 <div class="special" [class.special]="isSpecial">This one is not so special</div> //判斷表達式的值是否爲真,來添加類名
3.style
經過樣式綁定,能夠設置內聯樣式。
形式:[style.style-property]="statement"
有些樣式綁定中的樣式帶有單位,在這裏,以根據條件來設置字體大小的單位this
<button [style.font-size.em]="isSpecial ? 3 : 1" >Big</button> <button [style.font-size.%]="!isSpecial ? 150 : 50" >Small</button>
CSS 類綁定 是添加或刪除單個類的最佳途徑
樣式綁定是設置單同樣式值的簡單方式
形式:(event)="statement"url
<div (myClick)="clickMessage=$event">click</div> //綁定會經過名叫$event的事件對象傳遞關於此事件的信息(包括數據值),$event就是 DOM事件對象,它有像target和target.value這樣的屬性。
deleteRequest = new EventEmitter<Hero>(); delete() { this.deleteRequest.emit(this.hero); }
形式:[(...)]="statement"
雙向綁定語法其實是屬性綁定和事件綁定的語法糖,比起單獨綁定屬性和事件,雙向數據綁定語法顯得很是方便。
//第一種方式 @Input() hero: Hero; @Output() deleteRequest = new EventEmitter<Hero>(); //第二種方式 @Component({ inputs: ['hero'], outputs: ['deleteRequest'], })
//第一種方式 @Output('myClick') clicks = new EventEmitter<string>(); //第二種方式 @Directive({ outputs: ['clicks:myClick'] })
輸入屬性一般接收數據值。
輸出屬性暴露事件生產者,如EventEmitter對象。
Angular 的安全導航操做符 (?.) 是一種流暢而便利的方式,用來保護出如今屬性路徑中 null 和 undefined 值。
The null hero's name is {{nullHero?.name}}
<!--No hero, no text --> <div *ngIf="hero"> The hero's name is {{hero!.name}} </div>
與安全導航操做符不一樣的是,非空斷言操做符不會防止出現null或undefined。 它只是告訴 TypeScript 的類型檢查器對特定的屬性表達式,不作 "嚴格空值檢測"。