Vue组件间的传值五大场景,你造吗?
摘要:组件是 vue.js最强大的功能之一,这五个组件间传值场景你了解吗?
本文分享自华为云社区《你了解Vue组件间传值五大场景吗?》,作者:北极光之夜。 。
父组件向子组件传值:
比如有一个 Father.vue 的父组件要传值给 Children.vue 的子组件,完成共需四步:
父组件 Father.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>父组件区域</h2>
<hr />
<!-- 第二步:在引用的子组件标签里定义 :num="num" , num就是要传递的变量-->
<Children :num="num"></Children>
</div>
</template> <script>
// 引入子组件
import Children from "./Children.vue";
export default {
data() {
return {
// 第一步:我们将要把变量 num 的值传给子组件Children
num: 666,
};
},
components: {
Children,
},
};
</script>
子组件 Children.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>子组件区域</h2>
<!-- 第四步:在子组件显示父组件传过来的值 -->
<i>父组件传递过了的值:{{ num }}</i>
</div>
</template>
<script>
export default {
//第三步: 子组件可以通过定义的props就可以接收来自父组件的变量值 num
props: ["num"],
data() {
return {};
},
};
</script>
运行效果:

子组件向父组件传值:
比如有一个 Children.vue 的子组件要传值给 Father.vue 的父组件,完成共需六步:
子组件 Children.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>子组件区域</h2>
<!-- 第二步:得定义一个向父组件传值的方法,比如定义一个按钮,
绑定一个点击事件,触发giveFather方法 -->
<button @click="giveFather">giveFather</button>
</div>
</template>
<script>
export default {
data() {
return {
// 第一步:我们将要把变量 word 的值传给父组件
word: "北极光之夜。",
};
},
methods: {
// 第三:定义子组件向父组件传值的事件方法
giveFather() {
// 第四步:可以通过$emit传值给父组件,第一个参数为传值的方法,第二个参数为要传递的值
this.$emit("giveFather", this.word);
},
},
};
</script>
父组件 Father.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>父组件区域</h2>
<hr />
<!-- 第五步:要在引用的子组件标签里定义一个自定义事件,
该自定义事件要写为子组件$emit的第一个参数一样,
然后双引号里的方法可以自定义,我这就为getSon -->
<Children @giveFather="getSon"></Children>
</div>
</template> <script>
// 引入子组件
import Children from "./Children.vue"; export default {
data() {
return {};
},
components: {
Children,
},
methods: {
//第六步:定义获取子组件值的方法,该方法的参数就为子组件传递过来的值
getSon(temp) {
// 控制台输出看看能不能获取
console.log(temp);
},
},
};
</script>
运行效果:

兄弟组件间传值:
比如有一个 Father.vue 的父组件,它有一个Children.vue 的子组件和一个Son.vue 的子组件,那么,Children.vue 和 Son.vue 就是兄弟关系,现在 Children.vue 要向兄弟 Son.vue 传值:
首先在vue原型上定义一个新的实例,main.js文件内容,注意里面的操作步骤:
import Vue from 'vue'
import App from './App.vue' Vue.config.productionTip = false // 第一步,在vue原型上定义一个自己的方法,一般叫$bus,为vue实例
Vue.prototype.$bus = new Vue(); new Vue({
render: h => h(App),
}).$mount('#app')
Children.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>Children子组件区域</h2>
<!-- 第三步:定义一个向兄弟组件传值的方法,比如定义一个按钮,
绑定一个点击事件,触发giveSon方法 -->
<button @click="giveSon">giveSon</button>
</div>
</template>
<script>
export default {
data() {
return {
// 第二步:我们将要把变量 word 的值传给兄弟组件
word: "北极光之夜。",
};
},
methods: {
// 第四:定义子组件向兄弟组件传值的事件方法
giveSon() {
// 第五步:可以通过自定义的$bus的$emit传值给兄弟组件,
//第一个参数为传值的方法,第二个参数为要传递的值
this.$bus.$emit("giveSon", this.word);
},
},
};
</script>
Son.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>Son子组件区域</h2>
</div>
</template>
<script>
export default {
data() {
return {};
},
created() {
//第六步:通过$on方法进行获取兄弟传递过来的值。
//第一个参数为兄弟组件传值的方法,第二个参数是自定义的方法
this.$bus.$on("giveSon", this.getSon);
},
methods: {
//第七步,自定义的方法,参数就是兄弟传过来的值
getSon(temp) {
//输出看看
console.log(temp);
},
},
};
</script>
运行效果:

使用Vuex状态机传值:
Vuex是实现组件全局状态(数据)管理的一种机制,可以很方便的实现组件之间数据的共享。
关于Vuex的详细使用,可以看这篇文章,指路:https://auroras.blog.csdn.net/article/details/117536679
给后代组件传值,provide和inject:
比如有一个 Father.vue 的父组件,它有一个Children.vue 的子组件,那么这个Children.vue 的子组件是他的后代。而若Children.vue 也有一个子组件 grandSon.vue,那么grandSon.vue 就相当于 Father.vue的孙子组件,同样,grandSon.vue也会是Father.vue的后代。以此类推,它的孙子,孙子的孙子等等都是它后代。现在我们实现Father.vue 给它的后代grandSon.vue孙子组件传值:
父组件 Father.vue 内容,注意里面的操作步骤:
<template>
<div>
<h2>父组件区域</h2>
<hr />
<Children></Children>
</div>
</template> <script>
// 引入子组件
import Children from "./Children.vue";
export default {
data() {
return {
// 第一步:定义一个变量,我们将要把变量 num 的值传给后代组件grandSon.vue
num: "北极光之夜",
};
},
// 第二步,定义一个provide函数
provide() {
//第三步,如下定义,给后代接收
//giveAfter名称为自己定义,任意起,this固定写法
return {
giveAfter: this,
};
},
components: {
Children,
},
};
</script>
子组件Children.vue 内容,没什么,引入子组件就行:
<template>
<div>
<h2>
Children子组件区域
<hr />
<Grand-son></Grand-son>
</h2>
</div>
</template>
<script>
// 引入子组件
import GrandSon from "./GrandSon.vue";
export default {
data() {
return {};
}, components: {
GrandSon,
},
};
</script>
孙子组件GrandSon.vue 内容,注意里面的操作步骤:
<template>
<div>
GrandSon孙子组件区域
<!-- 第六步:展示数据 -->
<i> {{ num }}</i>
</div>
</template>
<script>
export default {
//第四步:定义inject,里面写祖先组件自定义的名称
inject: ["giveAfter"],
data() {
return {
// 第五步:取得祖先组件传的值,this.giveAfter.要传递值的变量名
//赋值给num
num: this.giveAfter.num,
};
},
};
</script>
看运行效果,成功获取:

Vue组件间的传值五大场景,你造吗?的更多相关文章
- Vue 组件间的传值(通讯)
组件之间的通讯分为三种 父给子传 子给父传 兄弟组件之间的通讯 1 父组件给子组件传值 子组件嵌套在父组件内部,父组件给子组件传递一个标识,在子组件内部用props接收,子组件在模板里可以通过{{}} ...
- vue组件间的传值方式及方法调用汇总
1.传值 a.父组件传子组件 方法一: 父页面: <myReportContent v-if="contentState==1" :paramsProps='paramsPr ...
- [Props] vue组件间的传值及校验
基本用法 Prop的基本用法很简单,只需要在子组件的Vue实例中定义该属性并把值设为目标属性的数组即可 Vue.component('child', { ... // 接收message props: ...
- Vue 组件间传值
前言 Vue 作为现在比较火的框架之一,相信您在使用的过程中,也会遇到组件间传值的情况,本文将讲解几种 Vue 组件间传值的几种方法,跟着小编一起来学习一下吧! 实现 注意: 学习本文,需要您对 Vu ...
- vue组件定义方式,vue父子组件间的传值
vue组件定义方式,vue父子组件间的传值 <!DOCTYPE html> <html lang="zh-cn"> <head> <met ...
- Vue—非父子组件间的传值(Bus/发布订阅模式/观察者模式/总线)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue组件间通信六种方式(完整版)
本文总结了vue组件间通信的几种方式,如props. $emit/ $on.vuex. $parent / $children. $attrs/ $listeners和provide/inject,以 ...
- Vue组件间通信6种方式
摘要: 总有一款合适的通信方式. 作者:浪里行舟 Fundebug经授权转载,版权归原作者所有. 前言 组件是 vue.js 最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的 ...
- Vue框架:6、Vue组件间通信,动态组件,插槽,计算属性,监听属性
目录 前端开发之Vue框架 一.Vue组件间通信 1.组件间通讯父传子 2.组件间通讯子传父 3.ref属性 二.动态组件 1.不使用动态组件 2.使用动态组件 3.keep-alive保持组件不销毁 ...
- Vue组件间通信-Vuex
上回说到Vue组件间通讯,最后留了一个彩蛋~~~Vuex.Vuex是另一种组件通讯的方法,这节来说说Vuex(store仓库). 首先Vuex需要安装,安装的方式有很多,在这里就不一一细说了.我是通过 ...
随机推荐
- python包引用方式总结
本文为博主原创,转载请注明出处: 在Python中,有多种引用包的方式.以下是常见的方式: 1. import语句 import语句是最常见和推荐的引用包的方式.它允许你引入整个包或包中的特定模块/子 ...
- 圆方树 useful things
圆方树,是解决仙人掌问题的实用方法,假设最初图都是圆点,对于每个环新建一个方点并连接这个环上所有圆点,能很好规避同一个点可能属于很多个环的情况,并且发现build完之后是一棵树 广义圆方树,能够不局限 ...
- Hugging Face 在法国联合启动人工智能创业项目!
Hugging Face.Meta.Scaleway 与法国创业孵化基地 STATION F 合作的人工智能创业项目正式启动 申请截止日期为 12 月 1 日本项目旨在利用开源人工智能的力量来扶持初创 ...
- 基于Spark对消费者行为数据进行数据分析开发案例
原创/朱季谦 本文适合入门Spark RDD的计算处理. 在日常工作当中,经常遇到基于Spark去读取存储在HDFS中的批量文件数据进行统计分析的案例,这些文件一般以csv或者txt文件格式存在.例如 ...
- 2022.7.12 thecold 讲课纪要
前言 上午刚学完平衡树,听学长说下午讲 \(LCT\) ,想了想就我这种蒟蒻平衡树还写不明白就搞 \(LCT\) ,绝对会挂,就打算下午去初中集训班摸摸鱼. 一进去就看见了 thecold 学长,真的 ...
- 架构探索之路-第一站-clickhouse
一.前言 架构, 软件开发中最熟悉不过的名词, 遍布在我们的日常开发工作中, 大到项目整体, 小到功能组件, 想要实现高性能.高扩展.高可用的目标都需要优秀架构理念辅助. 所以本人尝试编写架构系列文章 ...
- 记录一次 postgresql 优化案例( 嵌套循环改HASH JOIN )
今天同事给我一条5秒的SQL看看能不能优化. 表数据量: select count(1) from AAAA union all select count(1) from XXXXX; count - ...
- .net 温故知新【13】:Asp.Net Core WebAPI 缓存
一.缓存 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快. 从概念上讲,缓存是一种性能优化策略和设计考虑因素. 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性. ...
- 【Javaweb】四(关于接口类的作用)
这里我们还是以房产信息管理系统的题目举例: 发现在DAO层和service层都有接口类(注:impl是实现类) 为什么要用接口,不直接写实现类: 1.简单.规范性:这些接口不仅告诉开发人员你需要实现那 ...
- 火山引擎DataTester升级MAB功能,助力企业营销决策
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataTester,火山引擎推出的 AB 测试与智能优化平台,近日宣布对其 MAB(Multi-armed Ba ...