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 相关文章推荐
DOM精简教程
Oct 03 Javascript
网页图片延时加载的js代码
Apr 22 Javascript
使用jquery获取网页中图片高度的两种方法
Sep 26 Javascript
一个JavaScript递归实现反转数组字符串的实例
Oct 14 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
Angular2关于@angular/cli默认端口号配置的问题
Jul 15 Javascript
关于react中组件通信的几种方式详解
Dec 10 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
May 15 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
Jul 26 Javascript
vue--vuex详解
Apr 15 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
Node实现搜索框进行模糊查询
Jun 28 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
JAVA/JSP学习系列之七
2006/10/09 PHP
PHP 读取文件的正确方法
2009/04/29 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
JQUERY 实现窗口滚动搜索框停靠效果(类似滚动停靠)
2013/03/27 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
React Router基础使用
2017/01/17 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
JS设置随机出现2个数字的实例代码
2017/07/19 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
微信小程序实现的canvas合成图片功能示例
2019/05/03 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
[40:05]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第一局
2016/02/25 DOTA
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python中的随机函数小结
2018/01/27 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
Python3常用内置方法代码实例
2019/11/18 Python
深入了解python列表(LIST)
2020/06/08 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
单位领导证婚词
2014/01/14 职场文书
2014年车间工作总结
2014/11/21 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
郭明义电影观后感
2015/06/08 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
电频谱管理的原则是什么
2022/02/18 无线电
一起来学习Python的元组和列表
2022/03/13 Python