解决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 radio 联动效果
Mar 04 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
使用 js+正则表达式为关键词添加链接
Nov 11 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
Sep 27 Javascript
基于JavaScript实现div层跟随滚动条滑动
Jan 12 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
微信小程序之拖拽排序(代码分享)
Jan 21 Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
Apr 13 Javascript
微信小程序实现自上而下字幕滚动
Jul 14 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
js+css实现全屏侧边栏
Jun 16 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的PHP目录管理函数库
2008/07/10 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP异步调用socket实现代码
2012/01/12 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
File文件控件,选中文件(图片,flash,视频)即立即预览显示
2009/04/09 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
用JQuery调用Session的实现代码
2010/10/29 Javascript
json原理分析及实例介绍
2012/11/29 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
jquery实现简单的瀑布流布局
2016/12/11 Javascript
如何提高数据访问速度
2016/12/26 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
python使用wmi模块获取windows下硬盘信息的方法
2015/05/15 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
利用python如何处理nc数据详解
2018/05/23 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
Python实现分数序列求和
2020/02/25 Python
保卫科工作岗位职责
2014/03/01 职场文书
企业安全生产承诺书
2014/05/22 职场文书
创业计划书之烤红薯
2019/09/26 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python