解决Vue.js父组件$on无法监听子组件$emit触发事件的问题


Posted in Javascript onSeptember 12, 2018

最近学习vuejs看例子中用$on无法监听子组件$emit触发事件:

使用版本

vue.js 2.2.5

参考文献

1.vuejs API

2.解决实例

问题分析

1.之前写的自定义组件事件触发为this.$emit("myclick",this.todo.text);,这样this指的是todo-item的每一项,而最后vm.$on监听的是app组件,也就出说监听的是父节点,而触发的是子节点,故监听不到这个事件的。

解决思路

1.将触发事件放在父节点上触发,就可以监听到触发的事件了,即this.$parent.$emit("myclick",this.todo.text);,这样即可以在vm.$on监听到触发的事件了。

实现代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Emit事件和On事件</title>
</head>
<script src="../js/vue.js"></script>
<link rel="stylesheet" href="../css/demo.css" rel="external nofollow" />
<body>
<div id="app">
 <todo-item v-for="(item,index) in items" v-bind:todo="item" v-on:myclick="addResult"></todo-item>
</div>
</body>
<script>
 Vue.component('todoItem',{
 props:['todo'],
 template:'<li v-on:click="add">{{todo.text}}</li>', //1.在自定义组件中加入点击事件传给add
 methods:{
  add:function(){   //2.这里的add拿到template中的点击事件add,并执行函数
  this.$parent.$emit("myclick",this.todo.text); //3.暴露给父组件中点击事件名称为my-click
  },
 },
 })
 var vm=new Vue({
  el:'#app',
  data:{
  items:[
   { text: 'Runoob' },
   { text: 'Google' },
   { text: 'Taobao' }
  ]
  },
  methods:{
  //5.这里执行父组件传递的点击函数
  addResult:function(value){
   alert(value);
  },
  },
 });
 vm.$on('myclick',function (value) {
  console.log(value);
 })
</script>
</html>

以上这篇解决Vue.js父组件$on无法监听子组件$emit触发事件的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
滚动经典最新话题[prototype框架]下编写
Oct 03 Javascript
javascript操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
May 14 Javascript
bootstrap data与jquery .data
Jul 07 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
Javascript之面向对象--封装
Dec 02 Javascript
Jqprint实现页面打印
Jan 06 Javascript
js自定义Tab选项卡效果
Jun 05 Javascript
微信小程序实战篇之购物车的实现代码示例
Nov 30 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 #Javascript
Vue.js 十五分钟入门图文教程
Sep 12 #Javascript
Vue通过ref父子组件拿值方法
Sep 12 #Javascript
webpack4 升级迁移的实现
Sep 12 #Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 #Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
Sep 12 #Javascript
在Vue中获取组件声明时的name属性方法
Sep 12 #Javascript
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
详解angular用$sce服务来过滤HTML标签
2017/04/11 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
vue侧边栏动态生成下级菜单的方法
2018/09/07 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
python实现简单的TCP代理服务器
2014/10/08 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
python多任务之协程的使用详解
2019/08/26 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
Python 中@property的用法详解
2020/01/15 Python
python实现3D地图可视化
2020/03/25 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
什么是规则表达式
2012/05/03 面试题
大学生毕业的自我评价分享
2014/01/02 职场文书
上课玩手机检讨书
2014/02/08 职场文书
幼儿园中班评语大全
2014/04/17 职场文书
公司年底活动方案
2014/08/17 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
查摆剖析材料范文
2014/09/30 职场文书
2014年办公室人员工作总结
2014/12/09 职场文书
校运会宣传稿大全
2015/07/23 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书