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 相关文章推荐
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
Feb 03 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
node.js中的fs.fchmod方法使用说明
Dec 16 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
Jul 31 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
JS控制div跳转到指定的位置的几种解决方案总结
Nov 05 Javascript
Angular 实现输入框中显示文章标签的实例代码
Nov 07 Javascript
js核心基础之闭包的应用实例分析
May 11 Javascript
教你30秒发布一个TypeScript包到NPM的方法步骤
Jul 22 Javascript
vue实现循环滚动列表
Jun 30 Javascript
js实现简单选项卡制作
Aug 05 Javascript
无限循环轮播图之运动框架(原生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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
用PHP来计算某个目录大小的方法
2014/04/01 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
仿jQuery的siblings效果的js代码
2011/08/09 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
Jquery判断form表单数据是否变化
2016/03/30 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
node将geojson转shp返回给前端的实现方法
2019/05/29 Javascript
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
2019/06/18 jQuery
jquery分页优化操作实例分析
2019/08/23 jQuery
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
React实现todolist功能
2020/12/28 Javascript
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
Python中无限元素列表的实现方法
2014/08/18 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python模块结构与布局操作方法实例分析
2017/07/24 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
Python将8位的图片转为24位的图片实现方法
2018/10/24 Python
Python Matplotlib库安装与基本作图示例
2019/01/09 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
前端canvas动画如何转成mp4视频的方法
2019/06/17 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
英国最受欢迎的手表网站:Watch Shop
2016/10/21 全球购物
AC Lens:购买隐形眼镜
2017/02/26 全球购物
司机的工作范围及职责
2013/11/13 职场文书
QA工程师岗位职责
2013/11/20 职场文书
实习生个人的自我评价
2013/12/08 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript