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 相关文章推荐
Javascript中的关键字和保留字整理
Oct 16 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
Aug 10 Javascript
jQuery+canvas实现简单的球体斜抛及颜色动态变换效果
Jan 28 Javascript
详述JavaScript实现继承的几种方式(推荐)
Mar 22 Javascript
运用js教你轻松制作html音乐播放器
Apr 17 Javascript
js 轮播效果实例分享
Dec 28 Javascript
JavaScript中数组Array.sort()排序方法详解
Mar 01 Javascript
js实现时间轴自动排列效果
Mar 09 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
理解Angular的providers给Http添加默认headers
Jul 04 Javascript
Angular实现可删除并计算总金额的购物车功能示例
Dec 26 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
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 Google的translate API代码
2008/12/10 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
2010/11/21 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
js实现点击链接后延迟3秒再跳转的方法
2015/06/05 Javascript
简述JavaScript中正则表达式的使用方法
2015/06/15 Javascript
javascript实现鼠标放上后下边对应内容变换的效果
2015/08/06 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
浅谈layui 绑定form submit提交表单的注意事项
2019/10/25 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
vue实现购物车案例
2020/05/30 Javascript
Paypal支付不完全指北
2020/06/04 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
Python获取apk文件URL地址实例
2013/11/01 Python
Python中asyncore异步模块的用法及实现httpclient的实例
2016/06/28 Python
Python常用库推荐
2016/12/04 Python
详解Python中for循环是如何工作的
2017/06/30 Python
python 画出使用分类器得到的决策边界
2019/08/21 Python
pytorch使用tensorboardX进行loss可视化实例
2020/02/24 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
详解css3使用transform出现字体模糊的解决办法
2020/10/16 HTML / CSS
纠风工作实施方案
2014/03/15 职场文书
室内趣味活动方案
2014/08/24 职场文书
清洁工岗位职责
2015/02/13 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
详解Laravel服务容器的优势
2021/05/29 PHP
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Pycharm远程调试和MySQL数据库授权问题
2022/03/18 MySQL
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python