解决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 相关文章推荐
新老版本juqery获取radio对象的方法
Mar 01 Javascript
使用js在页面中绘制表格核心代码
Sep 16 Javascript
JS 删除字符串最后一个字符的实现代码
Feb 20 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
AngularJS 过滤器的简单实例
Jul 27 Javascript
jQuery Validate表单验证插件的基本使用方法及功能拓展
Jan 04 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
Feb 22 Javascript
javascript编程实现栈的方法详解【经典数据结构】
Apr 11 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
js实现鼠标滑动到某个div禁止滚动
Sep 17 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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实现微信发红包程序
2015/08/24 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
form表单传递数组数据、php脚本接收的实例
2017/02/09 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
javascript中的array数组使用技巧
2010/01/31 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
jquery+html5制作超酷的圆盘时钟表
2015/04/14 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
jQuery生成假加载动画效果
2016/12/01 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
Python程序员鲜为人知但你应该知道的17个问题
2014/06/04 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
通俗讲解python 装饰器
2020/09/07 Python
Python内置函数及功能简介汇总
2020/10/13 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
应届生学校辅导员求职信
2013/11/07 职场文书
专科文秘应届生求职信
2013/11/18 职场文书
财务专业大学生职业生涯规划范文
2013/12/30 职场文书
大学生个人实习的自我评价
2014/02/15 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
《失物招领》教学反思
2016/02/20 职场文书
多表查询、事务、DCL
2021/04/05 MySQL
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js
SQL CASE 表达式的具体使用
2022/03/21 SQL Server