解决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 Validation插件防止重复提交表单的解决方法
Mar 05 Javascript
javascript数字格式化通用类 accounting.js使用
Aug 24 Javascript
禁止选中文字兼容IE、Chrome、FF等
Sep 04 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
Feb 12 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
Apr 17 Javascript
js实现点击链接后延迟3秒再跳转的方法
Jun 05 Javascript
javascript设计模式Constructor(构造器)模式
Aug 19 Javascript
jquery easyui DataGrid简单示例
Jan 23 Javascript
微信小程序模板和模块化用法实例分析
Nov 28 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 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下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
Laravel 对某一列进行筛选然后求和sum()的例子
2019/10/10 PHP
避免 showModalDialog 弹出新窗体的原因分析
2010/05/31 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JS实现让网页背景图片斜向移动的方法
2015/02/25 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
Node.js插件安装图文教程
2016/05/06 Javascript
jQuery增加、删除及修改select option的方法
2016/08/19 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
JS编写兼容IE6,7,8浏览器无缝自动轮播
2018/10/12 Javascript
基于Vue SEO的四种方案(小结)
2019/07/01 Javascript
跟老齐学Python之玩转字符串(2)
2014/09/14 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
Python3 翻转二叉树的实现
2019/09/30 Python
PyQt5中多线程模块QThread使用方法的实现
2020/01/31 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
2020/05/25 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
数控机械专业个人的自我评价
2014/01/02 职场文书
促销活动方案模板
2014/02/24 职场文书
工程质量承诺书
2014/03/27 职场文书
建筑安全标语
2014/06/07 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
教师创先争优承诺书
2015/04/27 职场文书
小学体育组工作总结2015
2015/07/21 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers