解决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 相关文章推荐
一个原生的用户等级的进度条
Jul 03 Javascript
jQuery 常见操作实现方式和常用函数方法总结
May 06 Javascript
Javascript this 的一些学习总结
Aug 31 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
Jun 24 Javascript
微信小程序 122100版本更新问题解决方案
Dec 22 Javascript
基于jQuery实现顶部导航栏功能
Dec 27 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
Vue2实时监听表单变化的示例讲解
Aug 30 Javascript
判断JavaScript中的两个变量是否相等的操作符
Dec 21 Javascript
JavaScript this关键字指向常用情况解析
Sep 02 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
实用函数8
2007/11/08 PHP
php的dl函数用法实例
2014/11/06 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
onsubmit阻止form表单提交与onclick的相关操作
2010/09/03 Javascript
统计出现最多的字符次数的js代码
2010/12/03 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
js中生成map对象的方法
2014/01/09 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
Yarn的安装与使用详细介绍
2016/10/25 Javascript
vue.js  父向子组件传参的实例代码
2017/10/29 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
垃圾回收器的相关知识点总结
2018/05/13 Javascript
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
[07:52]2014DOTA2 TI逗比武士游V社解说背后的故事
2014/07/10 DOTA
python定时检查某个进程是否已经关闭的方法
2015/05/20 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Python操作MySQL模拟银行转账
2018/03/12 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
使用py-spy解决scrapy卡死的问题方法
2020/09/29 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
瀑布模型都有哪些优缺点
2014/06/23 面试题
中间件的定义
2016/08/09 面试题
幼师自我鉴定范文
2013/10/01 职场文书
军人离婚协议书样本
2014/10/21 职场文书
导盲犬小Q观后感
2015/06/11 职场文书
实践论读书笔记
2015/06/29 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书