vuejs使用$emit和$on进行组件之间的传值的示例


Posted in Javascript onOctober 04, 2017

$emit和$on可以实现组件之间的传值,我们知道父组件传值给子组件使用props,但是不允许子组件传值给父组件,这时候使用这个就可以实现了。

注意:$emit和$on的事件必须在一个公共的实例上,才能够触发。

例子:我要实现某个系统的通讯录功能,在web端我们可以使用基于jQuery的ztree插件实现目录的展现,但是在vuejs框架里面,tree目录需要通过递归组件实现。

1、现在有两个组件,父组件contact_index.vue,子组件cust_tree.vue

vuejs使用$emit和$on进行组件之间的传值的示例

2、点击父组件里面的选择银行,跳出银行树目录结构(使用vuejs的递归组件实现),这里面需要做两种传值:

(1)父组件通过props将树目录的数据list传到子组件中形成目录结构的展示;

(2)子组件里面通过点击相应的银行请求查询银行的通讯录,这里面需要将点击的银行的机构代码回传给父组件,父组件接收后通过input将机构代码提交给后台请求查询;

第一种是父组件给子组件传值使用props即可,现在我们来谈谈第二种情况,如何将子组件的值回传给父组件。

网上百度千篇一律全是使用$emit来实现,可是都有一个严重的误区没有给别人说明,开始我都按照搜索的结果进行操作,都会出现子组件$emit后父组件没有监听到函数的变化,研究了好久才发现$emit和$on的事件必须在一个公共的实例上,才能够触发。我的操作如下:

首先在src目录下新加bus.js作为一个公共的实例

import Vue from 'vue'

export var bus = new Vue()

其次,父组件在created里面定义$on监听事件

//父组件与子组件都要import bus.js
import {bus} from '../../bus.js'
created(){
  bus.$on('custTreeSay',(id)=>{
  //监听传值--机构代码
  this.instCode = id;
  //关闭弹窗
  this.popupVisibleTree = false;
  //调用查询方法刷新通讯录列表
  this.query();
  });
  bus.$on('custTreeSayName',(name)=>{
  //监听传值--机构名称
  this.instName = name;
  });
}

最后,在子组件中定义点击事件,调用父组件方法通过$emit将相应值传给父组件

<span @click="propInstCode(model);propInstName(model)">
 {{model.name}}
</span>
<script type="text/javascript">
 import {bus} from '../../bus.js'
 export default {
  props: ['model'],//这里通过props接收父组件的传值
  
  //method钩子定义传值方法,这边需要传不同的值
  methods: {
  //通过总线将值传给父组件
  propInstCode:function (model) {
  //$emit触发当前实例事件
  bus.$emit('custTreeSay',this.model.id);
  },
  propInstName:function (model) {
  bus.$emit('custTreeSayName',this.model.name);
  }
 },
 }

这样就实现了子组件能通过$emit将值传给bus在传给父组件了,最后是通过传的机构代码传给提交给后台查询的,但是我们同时也需要相应的机构名字来给客户展现,所以这里面只需要设置两个input就行了,机构代码的input隐藏起来,需要传值,另外的机构名称的input显示出来就可以了,如下:

//将点击跳出目录选择的方法放到显示的机构选择就可以了
<div class="query_condition_item">
 <label>选择机构</label>
 <input name="instName" v-model="instName" readonly @click="showTree()">
</div>

<div class="query_condition_item">
 <input name="instCode" v-model="instCode" hidden>
</div>

这篇文章就到这里了,我将我开发遇到的一些问题经验记录下来,也希望能够帮到大家!!也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
JS中判断null、undefined与NaN的方法
Mar 24 Javascript
js实现网页多级级联菜单代码
Aug 20 Javascript
AngularJS 过滤与排序详解及实例代码
Sep 14 Javascript
js 递归和定时器的实例解析
Feb 03 Javascript
PHP7新特性简述
Jun 11 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
Vue.js 中的实用工具方法【推荐】
Jul 04 Javascript
bootstrap table列和表头对不齐的解决方法
Jul 19 Javascript
vue-i18n实现中英文切换的方法
Jul 06 Javascript
实例讲解React 组件
Jul 07 Javascript
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
无限循环轮播图之运动框架(原生JS实现)
Oct 01 #Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 #Javascript
原生js封装运动框架的示例讲解
Oct 01 #Javascript
JS Testing Properties 判断属性是否在对象里的方法
Oct 01 #Javascript
基于原生js运动方式关键点的总结(推荐)
Oct 01 #Javascript
vuejs使用递归组件实现树形目录的方法
Sep 30 #Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 #Javascript
You might like
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
Prototype使用指南之range.js
2007/01/10 Javascript
js 省地市级联选择
2010/02/07 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
node.js入门教程
2014/06/01 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
ExpressJS入门实例
2015/01/14 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
vue.js+Echarts开发图表放大缩小功能实例
2017/06/09 Javascript
get  post jsonp三种数据交互形式实例详解
2017/08/25 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python 读写中文json的实例详解
2017/10/29 Python
python3实现跳一跳点击跳跃
2018/01/08 Python
python实现电脑自动关机
2018/06/20 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
PyQt5实现画布小程序
2020/05/30 Python
Python self用法详解
2020/11/28 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
华润集团网上药店:健一网
2016/09/19 全球购物
MAC彩妆澳洲官网:M·A·C AU
2021/01/17 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
医科学校毕业生自荐信
2013/11/09 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
教研活动总结
2014/04/28 职场文书
施工安全承诺书
2014/05/22 职场文书
党员自我评价范文2015
2015/03/03 职场文书
利用Java设置Word文本框中的文字旋转方向的实现方法
2021/06/28 Java/Android
Go 语言结构实例分析
2021/07/04 Golang