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 last-child 列表最后一项的样式
Jan 22 Javascript
JQuery1.4+ Ajax IE8 内存泄漏问题
Oct 15 Javascript
如何用JavaScript定义一个类
Sep 12 Javascript
javascript实现切换td中的值
Dec 05 Javascript
微信小程序 点击控件后选中其它反选实例详解
Feb 21 Javascript
Javascript中引用类型传递的知识点小结
Mar 06 Javascript
vue在使用ECharts时的异步更新和数据加载详解
Nov 22 Javascript
浅谈 vue 中的 watcher
Dec 04 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 Javascript
javascript实现简易计算器功能
Sep 23 Javascript
vue实现按钮切换图片
Jan 20 Vue.js
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加MYSQL服务器
2006/10/09 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
使用PHP如何实现高效安全的ftp服务器(二)
2015/12/30 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
PHP使用Session实现上传进度功能详解
2019/08/06 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
javascript full screen 全屏显示页面元素的方法
2013/09/27 Javascript
javascript自启动函数的问题探讨
2013/10/05 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
js+flash实现的5图变换效果广告代码(附演示与demo源码下载)
2016/04/01 Javascript
引用jquery框架后出错的解决方法
2016/08/09 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
JavaScript中三个等号和两个等号你了解多少
2017/07/04 Javascript
Express + Session 实现登录验证功能
2017/09/08 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
基于element-ui的rules中正则表达式
2018/09/04 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
利用python库在局域网内传输文件的方法
2018/06/04 Python
python tornado微信开发入门代码
2018/08/24 Python
Python中如何导入类示例详解
2019/04/17 Python
python制作简单五子棋游戏
2019/06/18 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
大学三年的自我评价
2013/12/25 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
物业工程部主管岗位职责
2015/04/16 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书