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 相关文章推荐
javascript jQuery插件练习
Dec 24 Javascript
javascript的onchange事件与jQuery的change()方法比较
Sep 28 Javascript
一样的table?不一样的table(可编辑状态table)
Sep 19 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
Mar 16 Javascript
原生js的数组除重复简单实例
May 24 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
Sep 12 Javascript
5种JavaScript脚本加载的方式
Jan 16 Javascript
基于滚动条位置判断的简单实例
Dec 14 Javascript
JQuery中的常用事件、对象属性与使用方法分析
Dec 23 jQuery
无限循环轮播图之运动框架(原生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
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
2013/05/15 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
利用js对象弹出一个层
2008/03/26 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
Django中的AutoField字段使用
2020/05/18 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
Hoover胡佛官网:美国吸尘器和洗地机品牌
2019/01/09 全球购物
应聘美工求职信
2013/11/07 职场文书
搬家公司的创业计划书
2014/01/01 职场文书
大学应届生的自我评价
2014/03/06 职场文书
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
企业办公室岗位职责
2014/03/12 职场文书
大学生村官考核材料
2014/05/23 职场文书
小学生运动会报道稿
2014/09/12 职场文书
我的生日感言
2015/08/03 职场文书
防溺水主题班会教案
2015/08/12 职场文书
员工聘用合同范本
2015/09/21 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技