Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Vue非父子组件传值「建议收藏」

Vue非父子组件传值「建议收藏」

作者头像
全栈程序员站长
发布于 2022-08-29 03:23:43
发布于 2022-08-29 03:23:43
74101
代码可运行
举报
运行总次数:1
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

前言

本节紧接这上一篇,说说如何在非父子组件中进行组件之间的传值

一、非父子组件传值

(1)事件总线 (2)$attrs / listeners

二、事件总线

事件总线的原理就是:

创建一个公共的Js文件,让其专门负责传值。就像公共的交通工具bus,data可以乘坐这辆bus到达指定的站台(相应的组件)

那么首先要做的就是在我们的项目中创造这辆bus

1.闭门造车(创建公用JS文件)

首先得在城市中(src目录下)租块地(创建一个文件夹),放置这辆bus。 bus.js的创建十分简单,只要粘贴以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Vue from 'vue';
export default new Vue;

当然造车的方法有很多种,笔者只想给你最便捷的一种。

2.上车

既然坐车就要刷卡,刷卡的方式也很简单,在需要传递数据的组件中引入bus.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import bus from './bus.js'

之后bus出发,在该组件中发射事件,发射事件需要一个媒介,在本篇就用button的click事件触发:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button @click="appmsg">bus传递data</button>

在methods中定义事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 methods:{ 
   
    appmsg(){ 
   
      bus.$emit('getonbus','App')
    }
  }

上车出发过程完成

3.下车

下车也要刷卡,方式相同,在需要接收数据的组件中引入bus.js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import bus from './bus.js'

在示例中提前定义了一个变量value

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data(){ 
   
    return{ 
   
      value:"Home"
    }
  }

到站接收数据,在接收组件的mounted中接收,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted(){ 
   
    bus.$on('getonbus', val => { 
   
      this.value = val
    })
  }

至此我们已经完成了数据的传输,我们来看看效果: html代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p>{ 
   { 
   value}}</p>

效果: 点击前:

点击后:

这确实是一个十分方便的方法,但是: 事件总线方式传递数据同时需要及时的移除事件监听,这对于初学者是个麻烦事,因此 换种方法往下看吧,哈哈

2.$attrs / listeners

这种传值方式主要是用于多级组件的传值,其实还是得保持一种“血脉联系” 例如爷爷组件给孙子组件传值,当然这借助简单的v-bind也是可以实现的,但是如果我们就是想跳过父组件就可以用这种方式;

在示例中的组件关系如下:Home(爷爷)>parent(父亲)>child(孩子) 在Home中定义数据,并传入parent:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <div class="home">
    <p>{ 
   { 
   value}}</p>
    <parent :msga="a" :msgb="b" :msgc ="c"></parent>
  </div>
</template>

<script>
import parent from './parent.vue'
export default { 
   
  name: 'home',
  components: { 
   
    parent
  },
  data(){ 
   
    return{ 
   
      value:"Home",
      a:"aaa",
      b:"bbb",
      c:"ccc"
    }
  }
}
</script>

在父组件中需要定义一个v-bind

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
    <div>
        <child v-bind="$attrs"></child>
    </div>
</template>

在孙子组件中打印$attrs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mounted(){ 
   
            console.log(this.$attrs)
        }

我们来看打印台结果: 孙子得到了爷爷全部的数据,真正的隔代亲! emit的延续版,对比学习,效果更佳

VueX是笔者认为最稳定的非父子传值的方法,笔者也会单独写出文章详解

总结

本篇主要讲解了非父子传值的两种方法,深入浅出,让大家对vue传值有更好的理解。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145796.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
8种vue组件通信方式详细解析实例
对于vue来说,组件是非常常见的,有很多平台都封装了了属于自己一套的组件,如element ui、we ui等等。同时组件之间的消息传递也是非常重要的,下面是我对组件之间消息传递的各种方式的总结,共有8种方式。如有不足之处,可以留言补充,互相学习。
Javanx
2019/09/04
7690
8种vue组件通信方式详细解析实例
Vue 组件通信六种方法
今天继续加油学习,今天整理一下VUE中组件通信六种方式,依次介绍一下各个通信方式。嘻嘻嘻,让我们一起学起来好吧~~~come
默默的成长
2022/10/29
7140
Vue 组件通信六种方法
Vue中组件之间8种通信方式,值得收藏
vue是数据驱动视图更新的框架, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢?首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式, 就好像过年回家,坐着一屋子的陌生人,相互之间怎么称呼,这时就需要先知道自己和他们之间是什么样的关系。vue组件中关系说明:
前端达人
2019/07/30
8800
深入浅出,带你看懂Vue组件间通信的8种方案
子组件通过$emit触发定义在父组件里面的自定义事件,他可以传两个值,第一个是自定义事件名,第二个是要传递的值。
JanYork_简昀
2022/08/29
1.3K0
深入浅出,带你看懂Vue组件间通信的8种方案
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
如果父组件是混合写法,子组件纯 Vue3 写法的话,是接收不到父组件里 data 的属性,只能接收到父组件里 setup 函数里传的属性。
Swift社区
2024/10/10
2690
Vue3 的 7 种和 Vue2 的 12 种组件通信,值得收藏
Vue3 过10种组件通讯方式
众所周知,Vue.js 中一个很重要的知识点是组件通信,不管是业务类的开发还是组件库开发,都有各自的通讯方法。
德育处主任
2022/04/17
1.9K0
Vue3 过10种组件通讯方式
八种 Vue 组件间通讯方式合集
Vue 提供了各种各样的通讯,其中包括兄弟间的通讯和非兄弟间的通讯,借此机会做个总结,查阅起来方便。
小丑同学
2020/09/21
1K0
vue中组件间通信方式的总结
这是我们比较熟悉的方式,主要是父子组件之间的传递方式,父传子使用props,子传父使用$emit.
用户9914333
2022/07/22
4750
Vue-组件之间常用的通信方式
Vue 组件之间常用的通信方式 props 总线 eventbus vuex 自定义事件 关系情况 $parent $children $root $refs provide/inject 非 prop 特性 $attrs $listener props 父->子传值 用属性 parent <child :faData = '来自父亲'></child> child props:{ faData:{ type:String, default:""
一只眠羊
2021/03/25
6630
面试官:Vue组件间通信方式都有哪些?
都知道组件是vue最强大的功能之一,vue中每一个.vue我们都可以视之为一个组件
@超人
2021/02/26
1.4K0
面试官:Vue组件间通信方式都有哪些?
一文将带你了解Vue中组件化通讯方式
前言 Vue提供了各种各样的通讯,其中包括兄弟间的通讯和非兄弟间的通讯以及后代之间的通讯,接下来就让我们一一解析吧。如果有喜欢的话可以点赞👍或者关注一下。 目标 学习Vue中的组件化通讯方式。 通讯方式 props 功能说明 父组件和子组件传递数据 目录结构 components ├── Parent.vue ├── Child.vue 复制代码 代码结构 父组件中使用子组件并传给子组件值。foo="foo" <template> <div> parent
玖柒的小窝
2021/11/08
2730
Vue 父子组件通信 兄弟组件通信 深层组件通信 方式一览
this.$parent   获取父组件实例 可以使用父组件实例的属性 this.$children 获取子组件数组 可以利用下标调用子组件实例的属性
憧憬博客
2020/07/20
1.3K0
Vue常用传值方式、父传子、子传父、非父子组件传值
在Vue的框架开发的项目过程中,经常会用到组件来管理不同的功能,有一些公共的组件会被提取出来。这时必然会产生一些疑问和需求?比如一个组件调用另一个组件作为自己的子组件,那么我们如何进行给子组件进行传值呢?如果是电商网站系统的开发,还会涉及到购物车的选项,这时候就会涉及到非父子组件传值的情况。当然你也可以用Vuex状态管理工具来实现,这部分我们后续会单独介绍。我先给大家介绍Vue开发中常用的三种传值方式。
IT工作者
2022/02/17
4.3K0
Vue组件间通信方式
  当前组件接收到的 props 对象。Vue 实例代理了对其 props 对象属性的访问。在父组件中使用子组件,本质通过v-bind绑定属性传入子组件,子组件通过props接收父组件传入的属性。
TimothyJia
2019/11/12
5680
Vue组件间通信方式
非父子组件传值
当组件的嵌套多时,非父子组件间传值就显得复杂,除了使用vuex (opens new window)实现之外,还可以通过Bus(或者叫 总线/发布订阅模式/观察者模式)的方式实现非父子组件间传值。
小小杰啊
2022/12/21
2810
VUE——vue中组件之间的通信方式有哪些
这种方式,从严格意义上讲不是值的传递,而是一种“取”(不推荐直接通过实例进行值的获取)
思索
2024/08/16
1220
Vue组件数据通信方案总结
初识Vue.js,了解到组件是Vue的主要构成部分,但组件内部的作用域是相对独立的部分,组件之间的关系一般如下图:
青梅煮码
2023/01/12
1.7K0
Vue非父子组件之间的传值
我们可以把一个网页拆分成很多部分,每个部分就是我们代码中的一个组件,左侧整个区域代表方块1,拆分成3个灰色区域代表方块2,左下区域又分成更小的2个深色区域,分别用2个方块3表示,右侧拆分成更小的3个深色区域用3个方块3表示
砖业洋__
2023/05/06
1.6K0
Vue非父子组件之间的传值
Vue2.x组件间通信汇总表
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~ 分享一篇以前做Vue2.x开发时总结的组件通信汇总 一、组件间通信方式表 序号 方式 使用场景 演示代码 说明 1 props 父=>子(属性传参) √ 接收数据: 子组件中props定义接收; 派发数据: 父组件中绑定数据进行派发 2 $emit/$on 子=>父组件通信(事件传参) √ 接收数据: 父组件调用$on/v-on; 派发数据: 子组件调用$emit() 3 event bus 兄弟组件通信
前端小鑫同学
2022/12/26
4320
Vue中 $attrs、$listeners 详解及使用
传送门:Vue中 子组件向父组件传值 及 .sync 修饰符 详解 传送门:Vue中 状态管理器(vuex)详解及应用场景 传送门:Vue中 事件总线(eventBus)详解及使用 传送门:Vue中 provide、inject 详解及使用
全栈程序员站长
2022/11/02
1.6K0
相关推荐
8种vue组件通信方式详细解析实例
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文