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静态页面传值的三种方法分享
Nov 12 Javascript
获取下拉列表框的值是数组,split,$.inArray示例
Nov 13 Javascript
javascript自定义的addClass()方法
May 28 Javascript
Node.js中调用mysql存储过程示例
Dec 20 Javascript
详解JavaScript 中的 replace 方法
Jan 01 Javascript
jQuery实现级联下拉框实战(5)
Feb 08 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 Javascript
详解使用vue实现tab 切换操作
Jul 03 Javascript
jQuery remove()过滤被删除的元素(推荐)
Jul 18 jQuery
html中通过JS获取JSON数据并加载的方法
Nov 30 Javascript
vue 如何使用递归组件
Oct 23 Javascript
vue3.0自定义指令(drectives)知识点总结
Dec 27 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
第一个无线电台是由谁发明的
2021/03/01 无线电
简单的php新闻发布系统教程
2014/05/09 PHP
jQuery lazyload 的重复加载错误以及修复方法
2010/11/19 Javascript
浅析JS刷新框架中的其他页面 &amp;&amp; JS刷新窗口方法汇总
2013/07/08 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
2014/11/19 Javascript
jQuery元素选择器用法实例
2014/12/23 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
requirejs + vue 项目搭建详解
2017/06/16 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
详解Vue2 添加对scss的支持
2019/01/02 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
vue实现信息管理系统
2020/05/30 Javascript
Javascript表单序列化原理及实现代码详解
2020/10/30 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
Python之py2exe打包工具详解
2017/06/14 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
使用Python获取当前工作目录和执行命令的位置
2020/03/09 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
HTML5 canvas 瀑布流文字效果的示例代码
2018/01/31 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
斯洛伐克最大的婴儿食品和用品网上商店:Feedo.sk
2020/12/21 全球购物
幼儿园长自我鉴定
2013/10/17 职场文书
工作疏忽检讨书500字
2014/10/26 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
校长一岗双责责任书
2015/05/09 职场文书
德能勤绩工作总结
2015/08/11 职场文书