angular4 数据绑定

数据绑定指的是组件(component)与模板(html)之间的数据交互

1.事件绑定

模板组件控制器单向绑定

例子:

html模板代码:

<button (click)="doOnClick($event)">点我</button>

组件类中添加方法:

doOnClick(event:any){
  console.log(event);  
}

 

2.属性绑定

组件控制器模板单向绑定

DOM属性绑定

代码形式:

1.使用[]

<input [value]="greeting">

2.插值表达式

<input value="{{greeting}}">

绑定过程:

  1.当组件的greeting值发生改变时,angular使用单向绑定机制更新DOM;

  2.当组件的greeting值发生改变时不会改变html属性,即html代码中input标签的value不变;

  3.浏览器会保持DOM和UI同步,所以angular更新了dom的value值之后,新的value的值被渲染到页面上;

  4.DOM的value属性的改变不会更新input标签的html属性;

  5.在页面输入新的值,不会更新input标签的html属性;

 

HTML属性绑定

代码形式:

绑定过程:

  1.当组件的greeting值发生变化时,angular会使用单向数据绑定更新html元素;

  2.angular不会更新DOM节点的属性;

  3.浏览器同步html属性和DOM属性,所以dom的value属性会变成A value;

  4.浏览器同步DOM和UI

 

DOM属性和HTML属性的关系

  1.就算名字相同,HTML属性和DOM属性也不是同一样东西。

  2.HTML属性的值指定了初始值,DOM属性的值表示当前值;DOM属性的值可以改变;HTML属性的值不能改变。

  3.模板绑定是通过DOM属性和事件来工作的,而不是HTML属性。

实例:

html模板代码:

<input value="Tom" (input)="doOnInput($event)">

组件类添加方法:

doOnInput(event:any){
  //DOM属性的value值
  console.log(event.target.value);
  //HTML属性的value值
  console.log(event.target.getAttribute('value'));            
}

执行代码,dom属性的value会随着输入框输入的值变化而变化,而html属性的value值一直是tom

结论:正常情况下我们优先使用DOM绑定就行,但是不是所有的HTML属性都有对应的DOM属性,这时候我们就要使用HTML属性绑定,如下:

html模板代码:

<table>
    <tr><td colspan="{{1+1}}"></td>DOM属性绑定实例</tr>
</table>

上述代码运行之后报错,因为插值表达式属于DOM属性绑定,而table没有对应的DOM属性。

 改成如下:

html模板代码:

<table>
    <tr><td [attr.colspan] ="size"></td>HTML属性绑定实例</tr>
</table>

组件类添加属性:

size:number = 2;

 

 3.双向绑定

angular提供了[(ngModel)]来实现双向绑定,从模板到组件的数据绑定,ngModel使用的是元素默认的事件,比如input框触发的就是input事件,所以只能用在特定的表单元素中。

注:要在app.module.ts中导入import { FormsModule } from '@angular/forms';

例子:

在输入框输入,触发input事件,获取输入的值赋值给name然后从组件传递到模板展示。

没有使用ngModel之前:

html模板代码:

<input [value]="name" (input)="doOnInput($event)">
{{name}}

使用了ngMode之后:

html模板代码:

<input [(ngModel)]="name">
{{name}}

 

ts组件类代码:

constructor(){
  setInterVal(() =>{
     this.name="tom"
    },3000)      
}        
doOnInput(event){
   this.name = event.target.value;
}

 

 

  

 

posted @ 2018-03-23 09:09  龙哥迷恋上  阅读(370)  评论(0编辑  收藏  举报