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 相关文章推荐
JS代码格式化和语法着色V2
Oct 14 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
js的hasownproperty使用示例
Mar 02 Javascript
用js读、写、删除Cookie代码续篇
Dec 03 Javascript
javascript的日期对象、数组对象、二维数组使用说明
Dec 22 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
Vue实现带进度条的文件拖动上传功能
Feb 23 Javascript
JS中min函数实例讲解
Feb 18 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
vuex 中插件的编写案例解析
Jun 10 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
Oct 29 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中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
php输出xml属性的方法
2015/03/19 PHP
php实现xml转换数组的方法示例
2017/02/03 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
利用jQuery对无序列表排序的简单方法
2016/10/16 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
vue路由拦截及页面跳转的设置方法
2018/05/24 Javascript
JS解惑之Object中的key是有序的么
2019/05/06 Javascript
js实现贪吃蛇小游戏
2019/10/29 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[15:46]教你分分钟做大人——沙王
2015/03/11 DOTA
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python Unittest自动化单元测试框架详解
2018/04/04 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Python虚拟环境venv用法详解
2020/05/25 Python
基于Pyinstaller打包Python程序并压缩文件大小
2020/05/28 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
前端实现弹幕效果的方法总结(包含css3和canvas的实现方式)
2018/07/12 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
农业生产宣传标语
2014/10/08 职场文书
家长通知书家长意见
2014/12/30 职场文书