详解Angular2中Input和Output用法及示例


Posted in Javascript onMay 21, 2017

对于angular2中的Input和Output可以和AngularJS中指令作类比。

Input相当于指令的值绑定,无论是单向的(@)还是双向的(=)。都是将父作用域的值“输入”到子作用域中,然后子作用域进行相关处理。

Output相当于指令的方法绑定,子作用域触发事件执行响应函数,而响应函数方法体则位于父作用域中,相当于将事件“输出到”父作用域中,在父作用域中处理。

看个angular2示例吧,我们定义一个子组件,获取父作用域的数组值并以列表形式显示,然后当点击子组件的元素时调用父组件的方法将该元素删除。

//app.component.html
<app-child [values]="data" (childEvent) = "getChildEvent($event)">
</app-child>

//app.component.ts
@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
export class AppComponent {
 data = [1,2,3];

 getChildEvent(index){
  console.log(index);
  this.data.splice(index,1);
 }
}

以上是跟组件app-root的组件类及模板,可以我们把data输入到子组件app-child中,然后接收childEvent事件并对其进行响应。

//app-child.component.html
<p *ngFor="let item of values; let i = index" (click)="fireChildEvent(i)">
 {{item}}
</p>


//app-child.component.ts
@Component({
 selector: 'app-child',
 templateUrl: './child.component.html',
 styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
 @Input() values;
 @Output() childEvent = new EventEmitter<any>();
 constructor() { }

 ngOnInit() {

 }
 fireChildEvent(index){
  this.childEvent.emit(index);
 }
}

子组件定义了values接收了父组件的输入,这里就是data值,然后使用ngFor指令显示。

当点击每个元素的时候触发了click事件,执行fireChildEvent函数,该函数要将元素的index值“输出”到父组件中进行处理。

Output一般都是一个EventEmitter的实例,使用实例的emit方法将参数emit到父组件中,触发父组件的childEvent事件。

然后父组件监听到该事件的发生,执行对应的处理函数getChildEvent,删除传递的元素索引指向的数据,同时,视图更新。

实际效果:

详解Angular2中Input和Output用法及示例

源码地址:https://github.com/justforuse/angular2-demo/tree/master/angular-input-output

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

Javascript 相关文章推荐
Gird事件机制初级读本
Mar 10 Javascript
javascript基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
JS 自定义带默认值的函数
Jul 21 Javascript
zShowBox 图片放大展示jquery版 兼容性
Sep 24 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
jQuery ui 利用 datepicker插件实现开始日期(minDate)和结束日期(maxDate)
May 22 Javascript
在Google 地图上实现做的标记相连接
Jan 05 Javascript
BootStrap模态框不垂直居中的解决方法
Oct 19 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
Jquery $.map使用方法实例详解
Sep 01 jQuery
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
Dec 09 Javascript
Angular2中如何使用ngx-translate进行国际化
May 21 #Javascript
详解angularjs利用ui-route异步加载组件
May 21 #Javascript
如何在AngularJs中调用第三方插件库
May 21 #Javascript
详解Angular-Cli中引用第三方库
May 21 #Javascript
Angular2安装angular-cli
May 21 #Javascript
Angular2使用Augury来调试Angular2程序
May 21 #Javascript
Angular2使用Angular-CLI快速搭建工程(二)
May 21 #Javascript
You might like
PHP开发框架总结收藏
2008/04/24 PHP
thinkPHP使用post方式查询时分页失效的解决方法
2015/12/09 PHP
非常经典的PHP文件上传类分享
2016/05/15 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
AngularJS中使用three.js的实例详解
2017/07/21 Javascript
详解webpack require.ensure与require AMD的区别
2017/12/13 Javascript
Vue.js 2.0和Cordova开发webApp环境搭建方法
2018/02/26 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
Python中用Ctrl+C终止多线程程序的问题解决
2013/03/30 Python
使用Python更换外网IP的方法
2018/07/09 Python
python 3调用百度OCR API实现剪贴板文字识别
2018/09/04 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Django 批量插入数据的实现方法
2020/01/12 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
python 安装impala包步骤
2020/03/28 Python
多重CSS背景动画实现方法示例
2014/04/04 HTML / CSS
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
英国知名小木屋定制网站:Tiger Sheds
2020/03/06 全球购物
总经理助理的八要求
2013/11/12 职场文书
2014年3.15团委活动总结
2014/03/16 职场文书
幼儿园保育员岗位职责
2014/04/13 职场文书
交警失职检讨书
2015/01/26 职场文书
如何在Python中创建二叉树
2021/03/30 Python
go语言中http超时引发的事故解决
2021/06/02 Golang