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学习笔记2 函数
Jan 11 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
js实现登录框鼠标拖拽效果
Mar 09 Javascript
关于vue.js发布后路径引用的问题解决
Aug 15 Javascript
JS动画定时器知识总结
Mar 23 Javascript
vue-cli开发环境实现跨域请求的方法
Apr 07 Javascript
js中Object.defineProperty()方法的不详解
Jul 09 Javascript
Angular6新特性之Angular Material
Dec 28 Javascript
js实现延迟加载的几种方法详解
Jan 19 Javascript
Vue form表单动态添加组件实战案例
Sep 02 Javascript
Js参数RSA加密传输之jsencrypt.js的使用
Feb 07 Javascript
JS封装cavans多种滤镜组件
Feb 15 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
建站常用13种PHP开源CMS比较
2009/08/23 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
2018/06/09 PHP
jQuery 相关控件的事件操作分解
2009/08/03 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
修改Vue打包后的默认文件名操作
2020/08/12 Javascript
java直接调用python脚本的例子
2014/02/16 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python requests库用法实例详解
2018/08/14 Python
python DataFrame 取差集实例
2019/01/30 Python
CentOS7安装Python3的教程详解
2019/04/10 Python
详解Django CAS 解决方案
2019/10/30 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
2020/02/03 Python
基于Tensorflow批量数据的输入实现方式
2020/02/05 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
元旦晚会邀请函
2014/02/01 职场文书
毕业自我鉴定书
2014/03/24 职场文书
2014年小学数学教师工作总结
2014/12/03 职场文书
研究生导师评语
2014/12/31 职场文书
给老婆的检讨书
2015/01/27 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
python实现简单倒计时功能
2021/04/21 Python
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python