详解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 相关文章推荐
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
Feb 05 Javascript
传智播客学习之java 反射
Nov 22 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
Apr 03 Javascript
简单谈谈JS数组中的indexOf方法
Oct 13 Javascript
使用 Vue.js 仿百度搜索框的实例代码
May 09 Javascript
vue微信分享 vue实现当前页面分享其他页面
Dec 02 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
Dec 06 Javascript
JavaScript实现多态和继承的封装操作示例
Aug 20 Javascript
vue刷新页面时去闪烁提升用户体验效果的实现方法
Dec 10 Javascript
vue和小程序项目中使用iconfont的方法
May 19 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
Sep 10 Javascript
js获取图片的base64编码并压缩
Dec 05 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连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
PHP中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
php技巧小结【推荐】
2017/01/19 PHP
简单谈谈PHP中的trait
2017/02/25 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
js仿iphone秒表功能 计算平均数
2017/01/11 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
解决Tensorflow安装成功,但在导入时报错的问题
2018/06/13 Python
Python爬虫使用代理IP的实现
2019/10/27 Python
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
应届生妇产科护士求职信
2013/10/27 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
CSS3新特性详解(五):多列columns column-count和flex布局
2021/04/30 HTML / CSS
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle