解决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 版本]
Mar 20 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
Nov 02 Javascript
Js遍历键值对形式对象或Map形式的方法
Aug 08 Javascript
JavaScript中数组Array方法详解
Feb 27 Javascript
解决vue2.0动态绑定图片src属性值初始化时报错的问题
Mar 14 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
关于AngularJS中ng-repeat不更新视图的解决方法
Sep 30 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
Jun 17 Javascript
解决ant Design Search无法输入内容的问题
Oct 29 Javascript
Vue全家桶入门基础教程
May 14 Vue.js
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
safari下载文件自动加了html后缀问题
2018/11/09 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
关于JS中的闭包浅谈
2013/08/23 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
JS实现iframe编辑器光标位置插入内容的方法(兼容IE和Firefox)
2016/06/24 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
微信小程序 页面传参实例详解
2016/11/16 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
mescroll.js上拉加载下拉刷新组件使用详解
2017/11/13 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
Js跳出两级循环方法代码实例
2020/09/22 Javascript
JavaScript实现一维数组转化为二维数组
2018/04/17 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
详解小白之KMP算法及python实现
2019/04/04 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
python itsdangerous模块的具体使用方法
2020/02/17 Python
在python3中实现更新界面
2020/02/21 Python
Python如何实现远程方法调用
2020/08/07 Python
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
综合办公室个人的自我评价
2013/12/22 职场文书
学校安全教育制度
2014/01/31 职场文书
医院总经理岗位职责
2014/02/04 职场文书
运动会邀请函范文
2014/02/06 职场文书
商务司机岗位职责
2015/04/10 职场文书
丧事主持词
2015/07/02 职场文书
2016新年感言
2015/08/03 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
2016党员干部廉政准则学习心得体会
2016/01/20 职场文书
Java面试题冲刺第十六天--消息队列
2021/08/07 面试题