解决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高亮效果的二种实现方法
Sep 14 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
Mar 21 Javascript
Jquery焦点图实例代码
Nov 25 Javascript
jQuery插件formValidator实现表单验证
May 23 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
Jun 09 Javascript
WebPack基础知识详解
Jan 16 Javascript
vue-router 学习快速入门
Mar 01 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
Apr 25 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
Vue打包后出现一些map文件的解决方法
Feb 13 Javascript
ES6下子组件调用父组件的方法(推荐)
Feb 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
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
javascript 自定义事件初探
2009/08/21 Javascript
Function.prototype.bind用法示例
2013/09/16 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jQuery中insertAfter()方法用法实例
2015/01/08 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
微信小程序倒计时功能实现代码
2017/11/09 Javascript
vuex与组件联合使用的方法
2018/05/10 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
微信小程序云开发之模拟后台增删改查
2019/05/16 Javascript
node.js使用stream模块实现自定义流示例
2020/02/13 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
基于js实现的图片拖拽排序源码实例
2020/11/04 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
用Python的Django框架编写从Google Adsense中获得报表的应用
2015/04/17 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python 命名规范知识点汇总
2020/02/14 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
python实现启动一个外部程序,并且不阻塞当前进程
2020/12/05 Python
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
《青蛙看海》教学反思
2014/04/23 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
培养联系人考察意见
2015/06/01 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis