解决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 相关文章推荐
很酷的javascript loading效果代码
Jun 18 Javascript
javascript各种复制代码收集
Sep 20 Javascript
全面理解面向对象的 JavaScript(来自ibm)
Nov 10 Javascript
js 上下左右键控制焦点(示例代码)
Dec 14 Javascript
javascript制作sql转换为stringBuffer的小工具
Apr 03 Javascript
png在IE6 下无法透明的解决方法汇总
May 21 Javascript
JavaScript Math.round() 方法
Dec 18 Javascript
详解JS几种变量交换方式以及性能分析对比
Nov 25 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
js前端实现图片懒加载(lazyload)的两种方式
Apr 24 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
深入了解Vue.js 混入(mixins)
Jul 23 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
解析php5配置使用pdo
2013/07/03 PHP
php除数取整示例
2014/04/24 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP实现的简单缓存类
2015/07/29 PHP
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
一个js控制的导航菜单实例代码
2013/12/03 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
Node.js Streams文件读写操作详解
2016/07/04 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
ES6中数组array新增方法实例总结
2017/11/07 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
深入理解JS的事件绑定、事件流模型
2018/05/13 Javascript
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
python删除文件示例分享
2014/01/28 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
Python编程中的异常处理教程
2015/08/21 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
python压包的概念及实例详解
2021/02/17 Python
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
工程部经理岗位职责
2013/12/08 职场文书
产品包装策划方案
2014/05/18 职场文书
营销团队口号
2014/06/06 职场文书
2014年教务工作总结
2014/12/03 职场文书
2016年最美孝心少年事迹材料
2016/02/26 职场文书
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技
java实现对Hadoop的操作
2021/07/01 Java/Android
详细介绍python操作RabbitMq
2022/04/12 Python