Angular2 组件间通过@Input @Output通讯示例


Posted in Javascript onAugust 24, 2017

本文介绍了Angular2 组件间通过@Input @Output通讯示例,分享给大家,具体如下:

父组件传给子组件:

子组件设置@Input属性,父组件即可通过设置html属性给子组件传值。

子组件:

@Input() title:string;
 _name:string = '';

 @Input() set name(name:string) {
  this._name=(name&&name.trim())||'';
 }

上面的代码设置了两个可供父组件传入的属性:title和name,当设置name属性时,set name(name:string)方法会执行,如果不需要处理setter,那么用title的形式,一行代码声明即可.

父组件调用:

<app-header [title]="title" name="姓名"></app-header>

调用方法有两种,属性名用中括号包围的title,值title是父组件中的对象名,而name没有用中括号,后面的值就是传给子组件的字符串。当然,不用中括号,也可以用{{name}}传对象的值。

如果要监听传入属性值的变化,可以在子组件实现OnChanges(@angular/core中)接口:

export class HeaderComponent implements OnChanges {
 ngOnChanges(changes: SimpleChanges): void {
  console.log(changes['title']);
 }
 @Input() title:string;
 _name:string = '';

 @Input() set name(name:string) {
  this._name=(name&&name.trim())||'';
 }

}

SimpleChanges 是一个用属性名作key的数组,通过属性名取出对象,对象里包含该属性变化前(previousValue)后(currentValue)的值。

父组件监听子组件变化

子组件通过@Output()暴露EventEmitter,父组件在声明子组件时增加EventEmitter的回调方法,子组件在需要的时候弹射事件,父组件的回调方法里就能收到。

子组件:

export class HeaderComponent implements OnChanges {
 ngOnChanges(changes: SimpleChanges): void {
  console.log(changes['title']);
 }
 @Input() title:string;
 _name:string = '';

 @Input() set name(name:string) {
  this._name=(name&&name.trim())||'';
 }
 //声明事件发射器
 @Output() checkEmitter=new EventEmitter<boolean>();
 //用于绑定checkbox的checked属性
 isChecked=true;

 toggle() {
  this.isChecked=!this.isChecked;
  //发射事件
  this.checkEmitter.emit(this.isChecked);
 }
}

子组件模板:

<p>
 {{title}}
</p>
<p><input type="checkbox" name="cb" [(ngModel)]="isChecked" (click)="toggle()" />Checkbox <br /></p>

父组件中声明:

<app-header [title]="title" name="{{name}}" (checkEmitter)="onCheckedChange($event)" ></app-header>

父组件事件回调接收:

export class AppComponent implements AfterViewInit{
 ngAfterViewInit() {

 }
 onCheckedChange(isChecked:boolean) {
  console.log("checkbox选中状态:"+isChecked);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
jQuery验证插件 Validate详解
Nov 20 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
Jul 01 Javascript
初步使用bootstrap快速创建页面
Mar 03 Javascript
JavaScript和jQuery制作光棒效果
Feb 24 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
Jul 18 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
Nov 07 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
微信小程序里引入SVG矢量图标的方法
Sep 20 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 Javascript
Angular2 组件交互实例详解
Aug 24 #Javascript
使用jQuery实现页面定时弹出广告效果
Aug 24 #jQuery
探究react-native 源码的图片缓存问题
Aug 24 #Javascript
详解vue.js之绑定class和style的示例代码
Aug 24 #Javascript
10个最优秀的Node.js MVC框架
Aug 24 #Javascript
Vue.js实现输入框绑定的实例代码
Aug 24 #Javascript
Vue.js实现价格计算器功能
Mar 30 #Javascript
You might like
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
JS location几个方法小姐
2008/07/09 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
原生node.js案例--前后台交互
2017/02/20 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
vue2.0s中eventBus实现兄弟组件通信的示例代码
2017/10/25 Javascript
移动端网页开发调试神器Eruda的介绍与使用技巧
2017/10/30 Javascript
在vue中读取本地Json文件的方法
2018/09/06 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
JS实现小米轮播图
2020/09/21 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[09:59]DOTA2-DPC中国联赛2月7日Recap集锦
2021/03/11 DOTA
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
2018/12/24 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
Linux内核产生并发的原因
2016/11/08 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
成龙洗发水广告词
2014/03/14 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python