Vue 组件之间的传值方式有哪些?

在平常写Vue项目时,组件传值必不可少,今天我们就要总结一下有哪些种方式呢?

1、父组件向子组件传值(用props)

子组件

<template><div><ul><li v-for="user in users" :key="user">{{user}}</li><!-- 遍历传递过来的值,然后呈现到页面 --></ul></div>
</template>
<script>
export default {name:"testComponent",props:{users:{ type:Array }},
}
</script>

父组件

<template><div><!-- 父组件向子组件传值(用props) --><testComponent :users="users"></testComponent></div>
</template>
<script>
import testComponent from "@/components/testComponent.vue"
export default {components:{testComponent},data(){return {users:["Henry","Bucky","Emily"],}},
}
</script>

2、子组件传值给父组件,子组件使用 $emit+事件 对父组件进行传值

子组件

<template><div><span @click="changeTitle">{{title}}</span></div>
</template>
<script>
export default {name:"testComponent",data(){return {title:"测试子组件向父组件传值"}},methods:{changeTitle(){// 子组件传值给父组件,子组件使用$emit+事件对父组件进行传值this.$emit("titleChanged",'子向父组件传值') //自定义事件  传递值“子向父组件传值”}}
}
</script>

父组件

<template><div><testComponent @titleChanged="updateTitle"></testComponent><h4>{{title}}</h4></div>
</template>
<script>
import testComponent from "@/components/testComponent.vue"
export default {components:{testComponent},data(){return {title:"原始标题"}},methods:{updateTitle(e){this.title = e}}
}
</script>

3、组件中可以使用 $parent和 $children获取到父组件实例和子组件实例,进而获取数据

$parent 当前组件树的根 Vue 实例。如果当前实例没有父实例,此实例将会是其自己。

$children 当前实例的直接子组件。需要注意 $children 并不保证顺序,也不是响应式的。如果你发现自己正在尝试使用 $children 来进行数据绑定,考虑使用一个数组配合 v-for 来生成子组件,并且使用 Array 作为真正的来源。

4、使用 $attrs和 $listeners,在对一些组件进行二次封装时可以方便传值,例如A->B->C

$attrs 简单来说就是 组件向下传递数据 的,是props通信的补充方案,避免了组件中props过多的窘境。
使用场景 : 在孙子或更深层后代组件访问祖辈组件中的数据
举例 :
祖父组件 GrandPa

<template><div>我是祖父: 下面是爸爸<Parent v-bind="$attrs" :name="'爸爸'" :age="age" :sex="sex" /></div>
</template><script>
import Parent from "./Parent.vue"
export default {name: "GrandPa",components: {Parent},data() {return {age: 65,sex: '男'}}
}
</script>

父亲组件 Parent

<template><div>我是爸爸:叫 {{ name }}, 下面是儿子<Son :name="'佩奇'" /></div>
</template><script>
import Son from "./Son.vue"
export default {name: "Parent",components: {Son},props: {name: {type: String,default: ""}},data() {return {age: 40,gender: '男'}},created() {// GrandPa 祖父组件传的数据 {age: 65,sex: '男'} 就在attrs里console.log(this.$attrs);}
}
</script>

儿子组件

<template><div>我是儿子:叫{{ name }}</div>
</template><script>
export default {name: "Son",props: {name: {type: String,default: ''}},data() {return {age: 18,sex: '男'}},created() {console.log(this.$attrs);}
}
</script>

如果要通过$attrs访问父组件数据,在父组件使用Son组件时吧数据传进来即可,那如果要访问祖父组件GrandPa的数据呢?在Parent组件中使用儿子组件时加上 v-bind=" $attrs " 即可。

<template><div>我是爸爸:叫 {{ name }}, 下面是儿子<Son v-bind="$attrs" :name="'佩奇'" /></div>
</template>

$listeners : 简单来说就是组件跨代传递函数的桥梁
使用场景 : 在孙子或更深层后代组件访问祖辈组件中定义的函数
和 a t t r s 差 不 多 , attrs 差不多, attrs差不多,attrs监听的是传递的数据, listeners 是监听的 祖辈组件里定义的函数

5、使用$refs获取组件实例,进而获取数据

6、使用Vuex进行状态管理

7、使用eventBus进行跨组件触发事件,进而传递数据

8、使用provide和inject,官方建议我们不要用这个,我在看ElementUI源码时发现大量使用

9、使用浏览器本地缓存,例如localStorage

Vue 组件之间的传值方式有哪些?相关推荐

  1. vue组件之间互相传值:父传子,子传父

    vue组件之间互相传值:父传子,子传父 为什么要用到组件间传值? 答:组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据,也不能直接将子组件的数据传到父组件里面 ...

  2. vue组件之间的传值(兄弟间的传值)

    概要:vue组件之间的传值大致有三种:父传子,子传父,还有兄弟之间,今天我们主要来讲兄弟之间的传值.废话不多说,我们直奔主题 vue 组件兄弟间的传值是要通过一个事件总线来实现(可以把事件总线理解为一 ...

  3. Vue和React组件之间的传值方式

    在现代的三大框架中,其中两个Vue和React框架,组件间传值方式有哪些? 组件间的传值方式 组件的传值场景无外乎以下几种: 父子之间 兄弟之间 多层级之间(孙子祖父或者更多) 任意组件之间 父子之间 ...

  4. 【Vue知识点】 vue组件之间如何传值

    1.父组件 传值 子组件 父组件:<Header  :msg='msg'/> 子组件: props:['msg']          props:{               msg:数 ...

  5. vue组件之间的传值的几种方法

    vue组件之间传值的几种方法总结 一.父传子 父传子技术就是把父组件中的数据传给子元素调用,用到的方法是 1.在父组件的子组件标签上绑定一个属性,挂载要传输的变量 ,语法是 :属性名 (冒号加属性名) ...

  6. vue组件间的传值方式及方法调用汇总

    1.传值 a.父组件传子组件 方法一: 父页面: <myReportContent v-if="contentState==1" :paramsProps='paramsPr ...

  7. vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父

    今看到一篇很不错的vue组件传值文章,便于理解,遂作笔记-vue 通常页面的视图App.vue应为这样 一.父组件向子组件传值浏览器 1.建立子组件,在src/components/文件夹下新建一个C ...

  8. Vue组件之间的通讯方式——父传子、子传父、兄弟组件间的通讯

    目录 一.父传子 1.props 属性传递 2.方法传递 3. $parent获取方法和属性 二.子传父 1. 属性传递 2 .通过$refs主动获取子组件方法和属性 3 .通过$children主动 ...

  9. 【全网最全】Vue 组件之间的传值

    1.组件间的传值方法简述 父组件 =data=> 子组件 子组件通过 props 子组件 =data=> 父组件 父组件向子组件传递一个函数(callback) 使用 $emit 自定义事 ...

最新文章

  1. 【opencv】(3) 图像滤波:均值、方框、中值、高斯
  2. 剑指offer_第13题_调整数组顺序使奇数位于偶数前面
  3. 相机模型--A Unifying Theory for Central Panoramic Systems and Practical Implications
  4. Zookeeper的功能以及工作原理
  5. shopping car 2.0
  6. python教程:super()的用法
  7. 以大多数人的努力程度之低,根本轮不到去拼天赋
  8. 一个很不错的LINUX基本操作归纳
  9. LeetCode 559. N叉树的最大深度
  10. 算法入门经典-第七章 例题7-2最大乘积
  11. git : 上传大文件或者PDF或者二进制文件导致无法上传
  12. ashx 使用Session
  13. kindle看pdf乱码_Kindle 中文书名 目录 乱码 解决办法
  14. 淘宝小程序开发注意点
  15. NodeJS必知基础知识(非巨详细)
  16. 电商项目需求分析---七月实习总结
  17. 北理工2013《Java程序设计》课程设计要求
  18. cfg80211 subsystem中的wiphy
  19. SAP IDES 下载指南
  20. 5年以上旧电脑如何升级

热门文章

  1. 全球同服 游戏服务器架构设计
  2. Allegro 创建XNET
  3. [转]wpa_supplicant连接wifi出错
  4. python将list转换为dataframe_Pandas把dataframe或series转换成list的方法
  5. 安川机器人外部急停信号点不开_安川机器人外部IO连接及应用介绍
  6. Python3用requests实现京东手机信息的爬取
  7. C语言实现根据体重计算可以喝汽水的罐数
  8. 国庆集训1027-1028(未完成)
  9. dgraph学习(二)
  10. 打印资料用什么软件?