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 相关文章推荐
一个JQuery写的点击上下滚动的小例子
Aug 27 Javascript
JS函数实现动态添加CSS样式表文件
Dec 15 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 Javascript
js点击出现悬浮窗效果不使用JQuery插件
Jan 20 Javascript
javascript实现获取cookie过期时间的变通方法
Aug 14 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
Nov 06 Javascript
javascript中tostring()和valueof()的用法及两者的区别
Nov 16 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
Jan 10 Javascript
AngularJS 中文API参考手册
Jul 28 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
详解webpack + react + react-router 如何实现懒加载
Nov 20 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
微信小程序教程系列之设置标题栏和导航栏(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新手谈谈我的学习心得
2007/02/25 PHP
PHP 反向排序和随机排序代码
2010/06/30 PHP
PHP内核探索:变量概述
2014/01/30 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
php中使用sftp教程
2015/03/30 PHP
php中关于socket的系列函数总结
2015/05/18 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
jQuery学习笔记之控制页面实现代码
2012/02/27 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
Javascript技术栈中的四种依赖注入详解
2016/02/23 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
Python getopt模块处理命令行选项实例
2014/05/13 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
windows 下python+numpy安装实用教程
2017/12/23 Python
Python用for循环实现九九乘法表
2018/05/31 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
flask框架中的cookie和session使用
2021/01/31 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
"引用"与多态的关系
2013/02/01 面试题
shallow copy和deep copy的区别
2016/05/09 面试题
总经理岗位职责说明书
2014/07/30 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
vue css 相对路径导入问题级踩坑记录
2022/06/05 Vue.js