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字符串拼接的效率问题
Dec 25 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
使用jQuery仿苹果官网焦点图特效
Dec 23 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
Jun 05 Javascript
Bootstrap CSS布局之按钮
Dec 17 Javascript
详解vue项目优化之按需加载组件-使用webpack require.ensure
Jun 13 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
Sep 20 jQuery
利用javascript如何随机生成一定位数的密码
Sep 22 Javascript
详解在React中跨组件分发状态的三种方法
Aug 09 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
JavaScript中的惰性载入函数及优势
Feb 18 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
BBS(php &amp; mysql)完整版(八)
2006/10/09 PHP
php表单转换textarea换行符的方法
2010/09/10 PHP
php继承的一个应用
2011/09/06 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
Yii2.0 RESTful API 基础配置教程详解
2018/12/26 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
JS 对象介绍
2010/01/20 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
详解vue中使用微信jssdk
2019/04/19 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
微信小程序页面间传递数组对象方法解析
2019/11/06 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
Python线性方程组求解运算示例
2018/01/17 Python
python3处理含有中文的url方法
2018/05/10 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
CSS3媒体查询(Media Queries)介绍
2013/09/12 HTML / CSS
PHP如何调用MYSQL存储过程
2014/05/30 面试题
有模特经验的简历自我评价
2013/09/19 职场文书
军训的自我鉴定
2013/12/10 职场文书
高职教师岗位职责
2013/12/24 职场文书
住宅质量保证书
2014/04/29 职场文书
教师个人教学总结
2015/02/11 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
新人入职感言
2015/07/31 职场文书
幼儿园园长新年寄语
2015/08/17 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server