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 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
Aug 25 Javascript
jquery animate图片模向滑动示例代码
Jan 26 Javascript
javascript suggest效果 自动完成实现代码分享
Feb 17 Javascript
JavaScript 数组详解
Oct 10 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
JS实现浏览器状态栏文字闪烁效果的方法
Oct 27 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
AngularJS 执行流程详细介绍
Aug 18 Javascript
js严格模式总结(分享)
Aug 22 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
vue实现随机验证码功能(完整代码)
Dec 10 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 强制下载文件实现代码
2013/10/28 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP日期和时间函数的使用示例详解
2020/08/06 PHP
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/06/05 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
微信小程序实战篇之购物车的实现代码示例
2017/11/30 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
python嵌套函数使用外部函数变量的方法(Python2和Python3)
2016/01/31 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
python爬取网页内容转换为PDF文件
2020/07/28 Python
Python异常的检测和处理方法
2018/10/26 Python
python利用7z批量解压rar的实现
2019/08/07 Python
python 3.7.4 安装 opencv的教程
2019/10/10 Python
用python实现名片管理系统
2020/06/18 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
2013年学期结束动员演讲稿
2014/01/07 职场文书
总经理任命书
2014/03/29 职场文书
书香校园建设方案
2014/05/02 职场文书
活动总结怎么写啊
2014/05/07 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
PyTorch梯度裁剪避免训练loss nan的操作
2021/05/24 Python
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL