Angular2数据绑定详解


Posted in Javascript onApril 18, 2017

大致介绍

Angular2中数据绑定的方式默认是以单向方式,数据绑定的方式可以分为:

1、属性绑定和插值表达式 组件类-> 模板

2、事件绑定:模板 -> 组件类

3、双向绑定: 模板 <-> 组件类

事件绑定

事件绑定是把模板中的事件绑定到组件类中的方法上,例如在一个组件中的HTML代码是:

<p>
 <a (click)="doClick($event)">点我</a>
</p>

(click)表示要进行的操作,当用户点击时就会执行组件类中的doClick方法

export class BindComponent implements OnInit {

 constructor() { }

 ngOnInit() {
 }

 doClick(event: any){
  console.log(event.target.innertext);
 }
}

属性绑定和插值表达式

其实属性绑定和插值表达式是同一个东西,因为在解析代码时,插值表达式会转换为属性绑定,所以你想用哪个就用哪个

下面的代码作用都是一样的

<!-- 插值表达式 -->
<img src="{{imgUrl}}" />

<!-- 属性绑定 -->
<img [src]="imgUrl" />

属性绑定又分为HTML属性绑定和DOM属性绑定,他们之间的区别是什么?先来看一个例子

<input type="text" value="hello" (input)="doInput($event)" />

doInput(event: any){
  console.log(event.target.value);
  console.log(event.target.getAttribute('value'));
 }

浏览器的显示:

Angular2数据绑定详解

可以看到event.target.value是获取的DOM属性,是可变的。表示当前元素的状态

而event.target.getAttribute("value")获取的是HTML属性,是不可变的。只负责初始化HTML元素,不可改变

注意:

1、有些DOM属性没有映射的HTML属性,同样有些HTML属性也没有映射的DOM属性

2、模板绑定的是DOM属性

HTML属性绑定

1、基本HTML属性绑定

<td [attr.colspan]="表达式"></td>

2、css绑定

<div class="a" [class]="b"></div> //b会完全替代a
<div [class.a]="fn()"></div> //fn()返回true,false,如果true添加.a
<div [ngClass]="{a:isA,b:isB}"></div> //b会完全替代a

3、样式绑定

<button [style.color]="a?red:green">button</button>
<button [ngStyle]="{'font-style':a?'red':'green'}">button</button>

双向绑定

双向绑定可以从组件类 -> 模板,也可以从模板 -> 组件类

例子:

<input type="text" [(ngModel)]="name" (input)="doInput()" />

private name: string = 'asdf';
 
 doInput(){
  setInterval(() => {
   this.name = 'sdf';
  },3000);
 }

利用[(ngModel)]可以实现双向数据绑定,首先在输入框中修改name,从而改变组件类中name的值,是模板组  -> 件类,修改值之后三秒,又重新设置name的值,是组件类 -> 模板

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript preload&amp;lazy load
May 13 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
Sep 03 Javascript
js获取页面传来参数的方法
Sep 06 Javascript
不得不分享的JavaScript常用方法函数集(下)
Dec 25 Javascript
javascript DIV实现跟随鼠标移动
Mar 19 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
Nov 09 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
node.js中cluster的使用教程
Jun 09 Javascript
JavaScript输出所选择起始与结束日期的方法
Jul 12 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
详解基于Vue-cli搭建的项目如何和后台交互
Jun 29 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
Jun 29 #Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
Apr 16 #Javascript
JavaScript实现前端实时搜索功能
Mar 26 #Javascript
用 js 的 selection range 操作选择区域内容和图片
Apr 18 #Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
Apr 18 #Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 #Javascript
微信小程序实战之轮播图(3)
Apr 17 #Javascript
You might like
基于PHP+Ajax实现表单验证的详解
2013/06/25 PHP
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
2013/04/08 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
Jquery解析json字符串及json数组的方法
2015/05/29 Javascript
Jquery实现瀑布流布局(备有详细注释)
2015/07/31 Javascript
老生常谈 关于JavaScript的类的继承
2016/06/24 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
在Vue中使用highCharts绘制3d饼图的方法
2018/02/08 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
解决layui的table插件无法多层级获取json数据的问题
2019/09/19 Javascript
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python实现简单的文字识别
2018/11/27 Python
实现Python与STM32通信方式
2019/12/18 Python
Python之Class&amp;Object用法详解
2019/12/25 Python
scrapy头部修改的方法详解
2020/12/06 Python
CSS3实现DIV圆角效果完整代码
2012/10/10 HTML / CSS
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
纽约手袋品牌:KARA
2018/03/18 全球购物
计算机相关的自我评价
2014/01/15 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
活动总结模板
2014/05/09 职场文书
学校法制宣传月活动总结
2014/07/03 职场文书
建筑管理专业求职信
2014/07/28 职场文书
明星员工获奖感言
2014/08/14 职场文书
环保志愿者活动方案
2014/08/14 职场文书
学期个人工作总结
2015/02/13 职场文书
董事长新年致辞
2015/07/29 职场文书