5.1数据绑定、响应式编程和管道
angular提供的数据绑定:
- 插值表达式:使用插值表达式将一个表达式的值显示在模板上。示例: - <h1>{{productTitle}}<hi>
- 属性绑定:使用方括号将一个表达式的值赋给Html标签的一个属性。示例: - <img [src] ="imgUrl">
- 事件绑定:使用小括号将组件控制器的一个方法指定为模板中事件的处理器。示例: - <button (click)="toProductDetail">商品详情</button>
- 双向绑定:使用“[(ngModel)]”将控制器和模板关联起来,任何一方的改变都会引起另一方的改变。示例: - <input [(ngModel)]="name">
使用插值表达式(控制器→模板DOM属性)
<h1>{{productTitle}}</h1>
<h1>{{表达式}}</h1>注意:angular会将“插值表达式”翻译为“属性绑定”
等价于
属性绑定
html属性和dom属性的区别
当浏览器渲染界面时,会为html标签生成一个类型为HTMLElement的Dom节点,每个dom都有自己的属性和方法。如input标签生成domInputElement
属性
描述
获取方式
html属性
不可变,其值为初始值
event.target.value
dom属性
可变,其值为当前值
event.target.getAttribute('value')
HTML属性和DOM属性的关系
- 少量HTML属性和DOM属性之间有着1:1的映射,如id 
- 有些HTML属性没有对应的DOM属性,如colspan 
- 有些DOM属性没有对应的HTML属性,如textContent 
- 就算名字相同,HTML属性和DOM属性也不是同一样东西 
- HTML属性的值指定了初始值,DOM属性的值表示当前值。 
- HTML属性的值不能改变,DOM属性的值可以改变。 
- 模板绑定使用DOM属性和事件来工作的,而不是Html属性 
实战:为一个input标签设置“value”属性并添加“input”事件,“value”属性值为“初始值”,“input”事件将触发控制器的onInput()方法打印出标签的Html属性和Dom属性值
- 模板代码 - <input value="初始值" (input)="onInput($event)">
- 控制器代码 - onInput(event: any): void { console.log(event); console.log('dom属性value值:' + event.target.value); console.log('html属性value值:' + event.target.getAttribute('value')); }
DOM属性绑定(控制器→模板DOM属性)
angular中常使用的是DOM属性绑定。
HTML属性绑定(控制器→模板HTML属性)
当某些标签的HTML属性没有与之对应的DOM属性时,需要使用HTML属性绑定。例如table标签colspan只有HTML属性而没有DOM属性。
- 基本Html属性绑定 - <td [attr.colspan]="size">...</td> <td [attr.HTML属性]="控制器属性">...</td>
- css类绑定 - <div class="xxx yyy" [class]="someExprission">...</div>- <div [class.special]="isSpecial">...</div> <div [class.css类名]="布尔值">...</div>- <div [ngClass]="{xxx:isX,yyy:isY}"></div> <div [ngClass]="{css类:表达式true或false}"></div>
- 样式绑定 - <button [style.color]="isSpecial?'red':'green' ">...</button> <button [style.样式属性.样式属性值单位]="判断条件?'结果为true样式属性值':'结果为false样式属性值' ">...</button>- <div [ngStyle]="{'font-style':this.canSave?'italic':'normal'}">...</div> <div [ngStyle]="{'样式属性':判断条件?'结果为true样式属性值':'结果为false样式属性值'}">...</div>
事件绑定(模板→控制器)
<input (input)="onInputEvent($event)">
<input (事件名称)="控制器方法名称(浏览器事件对象)">- 事件绑定结构: - 结构 - 描述 - 小括号 - 表示这是个事件绑定 - 事件名称 - 事件可以为:示例中为input事件 - 组件方法名称 - 示例中为onInputEvent - 浏览器事件对象 - 示例中为$event - 当事件发生时执行的表达式除了上述的控制器方法,还可以为任意表达式。 
- 实战:为一个“点我”按钮添加onlick事件,事件触发时调用控制器中的onclick()方法打印出按钮的事件对象。 - 模板代码 - <button (click)="onClick($event)">点我</button>
- 控制器代码 - onClick(event: object): void { console.log(event); }
 
双向绑定
双向绑定=事件绑定+属性绑定。 不过我们并不知道双向绑定中绑定的具体事件,angular将会为不同标签绑定不同的事件不同。
使用双向绑定时,需要在模块的@NgModule注解的imports中引入FormsModule。
Last updated
Was this helpful?