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判断录入的日期是否合法
Jan 08 Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
jQuery1.5.1 animate方法源码阅读
Apr 05 Javascript
javascript window.confirm确认 取消对话框实现代码小结
Oct 21 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
JQuery EasyUI 数字格式化处理示例
May 05 Javascript
原生JS和JQuery动态添加、删除表格行的方法
May 28 Javascript
canvas绘制七巧板
Feb 03 Javascript
webpack 单独打包指定JS文件的方法
Feb 22 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
May 15 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
Jun 20 Javascript
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
微信小程序教程系列之设置标题栏和导航栏(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生成的一个树叶图片画图例子
2014/04/16 PHP
php解析xml方法实例详解
2015/05/12 PHP
PHP整合PayPal支付
2015/06/11 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
深入解析PHP底层机制及相关原理
2020/12/11 PHP
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
2011/03/10 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
JavaScript SweetAlert插件实现超酷消息警告框
2016/01/28 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
BootStrap Table 设置height表头与内容无法对齐的问题
2016/12/28 Javascript
解决Vue.js父组件$on无法监听子组件$emit触发事件的问题
2018/09/12 Javascript
js实现弹窗效果
2020/08/09 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[51:39]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第二场 2月7日
2021/03/11 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
python flask中静态文件的管理方法
2018/03/20 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
Python转换字典成为对象,可以用&quot;.&quot;方式访问对象属性实例
2020/05/11 Python
Python识别处理照片中的条形码
2020/11/16 Python
在canvas上实现元素图片镜像翻转动画效果的方法
2018/03/20 HTML / CSS
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
工厂厂长的职责
2013/12/12 职场文书
个人更名证明
2015/06/23 职场文书
如何计划开一家便利店?
2019/07/31 职场文书
vue使用watch监听属性变化
2022/04/30 Vue.js