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 获取表单file全路径
Dec 31 Javascript
firefox浏览器不支持innerText的解决方法
Aug 07 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
Nov 28 Javascript
javascript中的self和this用法小结
Feb 08 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
May 14 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
Bootstrap CSS组件之导航(nav)
Dec 17 Javascript
你不知道的 javascript【推荐】
Jan 08 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
Nov 26 Javascript
基于vue--key值的特殊用处详解
Jul 31 Javascript
使用typescript快速开发一个cli的实现示例
Dec 09 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
php通过数组实现多条件查询实现方法(字符串分割)
2014/05/06 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
Raphael带文本标签可拖动的图形实现代码
2013/02/20 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
Javascript 实现图片无缝滚动
2014/12/19 Javascript
简述Jquery与DOM对象
2015/07/10 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
JavaScript使用简单正则表达式的数据验证功能示例
2017/01/13 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
2017/11/29 Python
python机器学习理论与实战(二)决策树
2018/01/19 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
车间班组长的职责
2013/12/13 职场文书
初中地理教学反思
2014/01/11 职场文书
联欢晚会主持词
2014/03/25 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL