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 相关文章推荐
拖动Html元素集合 Drag and Drop any item
Dec 22 Javascript
TextArea 控件的最大长度问题(js json)
Dec 16 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
Apr 14 Javascript
用JavaScript计算在UTF-8下存储字符串占用字节数
Aug 08 Javascript
js单例模式详解实例
Nov 21 Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
Jan 08 Javascript
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
AngularJs分页插件使用详解
Jun 30 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
Sep 04 Javascript
vue-cli3.X快速创建项目的方法步骤
Nov 14 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常用函数的用法详解
2013/05/10 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
JS 动态加载脚本的4种方法
2009/05/05 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
js变量提升深入理解
2016/09/16 Javascript
js 数字、字符串、布尔值的转换方法(必看)
2017/04/07 Javascript
jQuery实现点击下拉框中的值累加到文本框中的方法示例
2017/10/28 jQuery
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
JavaScript提升机制Hoisting详解
2019/10/23 Javascript
微信小程序接入腾讯云验证码的方法步骤
2020/01/07 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
Ubuntu下安装PyV8
2016/03/13 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
详解Python中的正则表达式
2018/07/08 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
美国睫毛、眉毛精华液领导品牌:RevitaLash Cosmetics
2018/03/26 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
介绍一下Java中标识符的命名规则
2014/02/03 面试题
介绍一下你对SOA的认识
2016/04/24 面试题
党支部公开承诺践诺书
2014/03/28 职场文书
基层党支部整改方案
2014/10/25 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书
导游词幽默开场白
2019/06/26 职场文书