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 相关文章推荐
两个SUBMIT按钮,如何区分处理
Aug 22 Javascript
用javascript实现给图片加链接
Aug 15 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
May 10 Javascript
js检查页面上有无重复id的实现代码
Jul 17 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
Dec 05 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 Javascript
实例解析jQuery中如何取消后续执行内容
Dec 01 Javascript
Vue.Draggable实现拖拽效果
Jul 29 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
基于vue2实现左滑删除功能
Nov 28 Javascript
浅谈angular4实际项目搭建总结
Dec 01 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 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
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php中的静态变量的基本用法
2014/03/20 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
javascript实现信息增删改查的方法
2015/07/25 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
关于Function中的bind()示例详解
2016/12/02 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
JSON生成Form表单的方法示例
2018/11/21 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
vue实现两个区域滚动条同步滚动
2020/12/13 Vue.js
[45:59]完美世界DOTA2联赛PWL S2 FTD vs GXR 第二场 11.22
2020/11/24 DOTA
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python实现短网址ShortUrl的Hash运算实例讲解
2015/08/10 Python
Python中extend和append的区别讲解
2019/01/24 Python
Python求解正态分布置信区间教程
2019/11/20 Python
python输出数组中指定元素的所有索引示例
2019/12/06 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
Python Dataframe常见索引方式详解
2020/05/27 Python
Python定义一个函数的方法
2020/06/15 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
Selenium 安装和简单使用的实现
2020/12/04 Python
构造器Constructor是否可被override?
2013/08/06 面试题
编码转换,怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串
2014/01/07 面试题
金融系应届毕业生求职信
2014/05/26 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL