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 相关文章推荐
JS 跳转页面延迟2种方法
Mar 29 Javascript
js实现单一html页面两套css切换代码
Apr 11 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
May 08 Javascript
如何利用JSHint减少JavaScript的错误
Aug 23 Javascript
详谈JavaScript的闭包及应用
Jan 17 Javascript
Bootstrap表单使用方法详解
Feb 17 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
Nov 03 Javascript
在vue项目中使用sass的配置方法
Mar 20 Javascript
webpack+vue+express(hot)热启动调试简单配置方法
Sep 19 Javascript
JS数组求和的常用方法总结【5种方法】
Jan 14 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 Javascript
javascript实现贪吃蛇小游戏
Jul 28 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
HTML TO JavaScript 转换
2006/06/26 Javascript
IE php关于强制下载文件的代码
2008/08/23 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
Python实现多行注释的另类方法
2014/08/22 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python使用htmllib分析网页内容的方法
2015/05/08 Python
Python中Iterator迭代器的使用杂谈
2016/06/20 Python
利用Python破解斗地主残局详解
2017/06/30 Python
python list格式数据excel导出方法
2018/10/31 Python
django创建超级用户过程解析
2019/09/18 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
python列表返回重复数据的下标
2020/02/10 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
html5唤起app的方法
2017/11/30 HTML / CSS
李维斯牛仔裤英国官方网站:Levi’s英国
2019/10/10 全球购物
会计电算化应届生求职信
2013/11/03 职场文书
运动会邀请函范文
2014/01/31 职场文书
2014年圣诞节促销方案
2014/03/14 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python