Angular自定义组件实现数据双向数据绑定的实例


Posted in Javascript onDecember 11, 2017

学过Angular的同学都知道,输入框通过[(ngModel)]实现双向数据绑定,那么自定义组件能不能实现双向数据绑定呢?答案是肯定的。

Angular中,我们常常需要通过方括号[]和圆括号()实现组件间的交互:

Angular自定义组件实现数据双向数据绑定的实例

那么在[]()的基础上,如何实现组件的双向数据绑定?

例子如下。

子组件:

<!--testDataBinding.component.html-->

<h1>childStatus: {{childStatus}}</h1>
//testDataBinding.component.ts

export class TestDataBindingComponent implements OnInit{
 @Input() childStatus;
 @Output() childStatusChange = new EventEmitter();
 ngOnInit(){
 setTimeout(()=>{
  this.childStatus = false;
  this.childStatusChange.emit(this.childStatus);
 },5000);
 }
}

注意这里的写法,这是关键所在,输出属性前半部分必须与输入属性相同,输入属性可以随意取名,输出属性需在输入属性基础上加上Change,比如你的输入属性是myData,那么输出属性就必须是myDataChange。

父组件:

<!--app.component.html-->

<test-binding [(childStatus)]="parentStatus"></test-binding>
<h1>parentStatus: {{parentStatus}}</h1>
//app.component.ts

import { Component,OnInit } from '@angular/core';
@Component({
 selector: 'my-app',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit{
 parentStatus: boolean = true;
 ngOnInit(){
 setTimeout(()=>{
  this.parentStatus = true;
 },10000);
 }
}

在父组件我们初始化parentStatustrue,并把它传到子组件TestDataBindingComponent

在子组件里,5秒后我们把childStatus设为false,看它能不能传到父组件。再过5秒,我们在父组件将parentStatus设为true,看它能不能传到子组件。

Angular自定义组件实现数据双向数据绑定的实例

事实证明,子组件值变化后,父组件的值也跟着变化;父组件值变化后子组件的值也跟着变了!

我们实现了双向绑定!

查看本文代码和效果,可点击这里

以上这篇Angular自定义组件实现数据双向数据绑定的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
不用构造函数(Constructor)new关键字也能实现JavaScript的面向对象
Jan 11 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
Feb 18 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
深入理解JavaScript中的箭头函数
Jul 28 Javascript
js简单倒计时实现代码
Apr 30 Javascript
Javascript点击按钮随机改变数字与其颜色
Sep 01 Javascript
Jquery Easyui分割按钮组件SplitButton使用详解(17)
Dec 18 Javascript
js下拉菜单生成器dropMenu使用方法详解
Aug 01 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
Jul 10 jQuery
D3.js 实现带伸缩时间轴拓扑图的示例代码
Jan 20 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
Mar 07 Javascript
vue实现简单数据双向绑定
Apr 28 Vue.js
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 #Javascript
Node.js中sequelize时区的配置方法
Dec 10 #Javascript
node.js多个异步过程中判断执行是否完成的解决方案
Dec 10 #Javascript
关于react中组件通信的几种方式详解
Dec 10 #Javascript
vue项目中v-model父子组件通信的实现详解
Dec 10 #Javascript
Angular项目从新建、打包到nginx部署全过程记录
Dec 09 #Javascript
利用ES6实现单例模式及其应用详解
Dec 09 #Javascript
You might like
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
php变量与字符串的增删改查操作示例
2020/05/07 PHP
jquery中ajax学习笔记一
2011/10/16 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JS远程获取网页源代码实例
2013/09/05 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
基于vue实现图片验证码倒计时60s功能
2019/12/10 Javascript
微信小程序点击按钮动态切换input的disabled禁用/启用状态功能
2020/03/07 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
python设置windows桌面壁纸的实现代码
2013/01/28 Python
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python关闭占用端口方式
2019/12/17 Python
Python Selenium参数配置方法解析
2020/01/19 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
Python里面search()和match()的区别
2016/09/21 面试题
计算机专业学生求职信分享
2013/12/15 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
会计系毕业求职信
2014/08/07 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
卖车协议书范文
2016/03/23 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
Python实现智慧校园自动评教全新版
2021/06/18 Python
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技