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注册协议倒计时的小例子
Jun 24 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
Dec 13 Javascript
一张Web前端的思维导图分享
Jul 03 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
ES6新特性三: Generator(生成器)函数详解
Apr 21 Javascript
vue之数据交互实例代码
Jun 20 Javascript
如何在JavaScript中谨慎使用代码注释
Jun 21 Javascript
JS实现手写 forEach算法示例
Apr 29 Javascript
JS实现时间校验的代码
May 25 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 Vue.js
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
实用函数4
2007/11/08 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
TP3.2.3框架文件上传操作实例详解
2020/01/23 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
利用javaScript实现点击输入框弹出窗体选择信息
2013/12/11 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
关于 angularJS的一些用法
2017/11/29 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Opencv求取连通区域重心实例
2020/06/04 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
Python 解析xml文件的示例
2020/09/29 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
乌克兰时尚鞋子和衣服购物网站:Born2be
2018/05/24 全球购物
Bulk Powders意大利:运动补充在线商店
2019/02/09 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
医校毕业生自我鉴定
2014/01/25 职场文书
读书活动实施方案
2014/03/10 职场文书
财务科科长岗位职责
2014/03/10 职场文书
党员干部民主生活会议批评与自我批评材料
2014/09/20 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2015员工年度考核评语
2015/03/25 职场文书
导游词之江南周庄
2019/12/06 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
MySQL8.0.18配置多主一从
2021/06/21 MySQL