从数据源到视图目标: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 的类型检查器对特定的属性表达式,不作 "严格空值检测"。