vue.js单文件组件中非父子组件的传值实例


Posted in Javascript onSeptember 13, 2018

最近在研究vue.js,总体来说还算可以,但是在web开发群里有一些人问在单文件组件开发模式中非父子组件如何传值的问题,今天在这里讲讲,希望对大家有所帮助!

在官网api中的这段讲解很少,也很模糊;官网中说明如下:

非父子组件通信:

有时候两个组件也需要通信 (非父子关系)。在简单的场景下,可以使用一个空的 Vue 实例作为中央事件总线:

var bus = new Vue();
// 触发组件 A 中的事件
bus.$emit('id-selected', 1)
// 在组件 B 创建的钩子中监听事件
bus.$on('id-selected', function (id) {
 // ...
})

那么这一段在单文件组件开发模式中具体怎么用呢?

首先在main.js中加入data,如下:

new Vue({
 el: '#app',
 router,
 template: '<App/>',
 components: { App },
 data:{
 bus:new Vue()
 }
})

如何获取到这个空的vue对象 bus呢.在组件里面直接调用这个this.$root

<template>
 <div class="title" @click="change(msg)">{{ msg }}</div>
</template>
<script>
 export default {
 name: 'first',
 data() {
  return {
  msg: '我是首页'
  }
 },
 methods: {
  change(text) {
  this.$root.bus.$emit("hehe", text)
  }
 }
 }

</script>

然后在另一个组件内调用on事件接收,当然在组件销毁时解除绑定,使用on事件接收,当然在组件销毁时解除绑定,使用off方法

<template>
 <h1>{{ msg }}</h1>
</template>
<script>
 export default {
 name: 'second',
 data() {
  return {
  msg: '我是第二页'
  }
 },
 created() {
  let that = this;
  this.$root.bus.$on("hehe", function (t) {
  that.msg = that.msg + t
  })
 }
 }

</script>

然后点击的时候就能传递值了,还等什么,快来试试吧!

以上这篇vue.js单文件组件中非父子组件的传值实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS fit布局使用说明
Oct 08 Javascript
Javascript的构造函数和constructor属性
Jan 09 Javascript
js 居中漂浮广告
Mar 21 Javascript
JQuery FlexiGrid的asp.net完美解决方案 dotNetFlexGrid-.Net原生的异步表格控件
Sep 12 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
javascript实现rgb颜色转换成16进制格式
Jul 10 Javascript
JS代码实现百度地图 画圆 删除标注
Oct 12 Javascript
Bootstrap页面标题Page Header的实现方法
Mar 22 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
Apr 28 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
jQuery实现获取form表单内容及绑定数据到form表单操作分析
Jul 03 jQuery
JavaScript数组方法的错误使用例子
Sep 13 #Javascript
vue仿element实现分页器效果
Sep 13 #Javascript
区别JavaScript函数声明与变量声明
Sep 12 #Javascript
详解js中Array的方法及技巧
Sep 12 #Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
Sep 12 #Javascript
angularjs下ng-repeat点击元素改变样式的实现方法
Sep 12 #Javascript
angularjs的单选框+ng-repeat的实现方法
Sep 12 #Javascript
You might like
PHP源码之explode使用说明
2011/08/05 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
php实现的AES加密类定义与用法示例
2018/01/29 PHP
PHP示例演示发送邮件给某个邮箱
2019/04/03 PHP
jQuery打印指定区域Html页面并自动分页
2014/07/04 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
js仿百度音乐全选操作
2017/01/13 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
JS使用Date对象实时显示当前系统时间简单示例
2018/08/23 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
怎么理解wx.navigateTo的events参数使用详情
2020/05/18 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python中的字典使用分享
2016/07/31 Python
简单实现Python爬取网络图片
2018/04/01 Python
pycharm 主题theme设置调整仿sublime的方法
2018/05/23 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
谈谈python垃圾回收机制
2020/09/27 Python
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
北美最大的零售退货翻新商:VIP Outlet
2019/11/21 全球购物
国外的一些J2EE面试题一
2012/10/13 面试题
卫校护理专业毕业生求职信
2013/11/26 职场文书
担保书格式及范文
2014/04/01 职场文书
求职信格式要求
2014/05/23 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
Ajax 的初步实现(使用vscode+node.js+express框架)
2021/06/18 Javascript
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
聊聊Python String型列表求最值的问题
2022/01/18 Python