解决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 相关文章推荐
jQuery 图片切换插件(代码比较少)
May 07 Javascript
javaScript函数中执行C#代码中的函数方法总结
Aug 07 Javascript
JS对话框_JS模态对话框showModalDialog用法总结
Jan 11 Javascript
javaScript中的this示例学习详解及工作原理
Jan 13 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
vue 表单输入格式化中文输入法异常问题
May 30 Javascript
在vue中v-bind使用三目运算符绑定class的实例
Sep 29 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
vue项目中使用Svg的方法
Oct 24 Javascript
Node.js Event Loop各阶段讲解
Mar 08 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
May 08 Javascript
Layui多选只有最后一个值的解决方法
Sep 02 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生成月历代码
2007/06/14 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php查询相似度最高的字符串的方法
2015/03/12 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
php生成HTML文件的类方法
2019/10/11 PHP
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
javascript中的self和this用法小结
2014/02/08 Javascript
JavaScript截取字符串的2个函数介绍
2014/08/27 Javascript
JavaScript更改字符串的大小写
2015/05/07 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
js实现键盘自动打字效果
2016/12/23 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
使用vue与jquery实时监听用户输入状态的操作代码
2017/09/19 jQuery
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
python机器学习之KNN分类算法
2018/08/29 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
自我评价格式
2014/01/06 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
医院营销工作计划
2015/01/16 职场文书
灵山大佛导游词
2015/02/04 职场文书
村官个人总结范文
2015/03/03 职场文书
车间安全生产管理制度
2015/08/06 职场文书
python函数指定默认值的实例讲解
2021/03/29 Python
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python