Vue 组件之间的传值方式有哪些?
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 组件之间的传值方式有哪些?相关推荐
- vue组件之间互相传值:父传子,子传父
vue组件之间互相传值:父传子,子传父 为什么要用到组件间传值? 答:组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据,也不能直接将子组件的数据传到父组件里面 ...
- vue组件之间的传值(兄弟间的传值)
概要:vue组件之间的传值大致有三种:父传子,子传父,还有兄弟之间,今天我们主要来讲兄弟之间的传值.废话不多说,我们直奔主题 vue 组件兄弟间的传值是要通过一个事件总线来实现(可以把事件总线理解为一 ...
- Vue和React组件之间的传值方式
在现代的三大框架中,其中两个Vue和React框架,组件间传值方式有哪些? 组件间的传值方式 组件的传值场景无外乎以下几种: 父子之间 兄弟之间 多层级之间(孙子祖父或者更多) 任意组件之间 父子之间 ...
- 【Vue知识点】 vue组件之间如何传值
1.父组件 传值 子组件 父组件:<Header :msg='msg'/> 子组件: props:['msg'] props:{ msg:数 ...
- vue组件之间的传值的几种方法
vue组件之间传值的几种方法总结 一.父传子 父传子技术就是把父组件中的数据传给子元素调用,用到的方法是 1.在父组件的子组件标签上绑定一个属性,挂载要传输的变量 ,语法是 :属性名 (冒号加属性名) ...
- vue组件间的传值方式及方法调用汇总
1.传值 a.父组件传子组件 方法一: 父页面: <myReportContent v-if="contentState==1" :paramsProps='paramsPr ...
- vue父组给子子组件传html,vue组件之间互相传值:父传子,子传父
今看到一篇很不错的vue组件传值文章,便于理解,遂作笔记-vue 通常页面的视图App.vue应为这样 一.父组件向子组件传值浏览器 1.建立子组件,在src/components/文件夹下新建一个C ...
- Vue组件之间的通讯方式——父传子、子传父、兄弟组件间的通讯
目录 一.父传子 1.props 属性传递 2.方法传递 3. $parent获取方法和属性 二.子传父 1. 属性传递 2 .通过$refs主动获取子组件方法和属性 3 .通过$children主动 ...
- 【全网最全】Vue 组件之间的传值
1.组件间的传值方法简述 父组件 =data=> 子组件 子组件通过 props 子组件 =data=> 父组件 父组件向子组件传递一个函数(callback) 使用 $emit 自定义事 ...
最新文章
- 【opencv】(3) 图像滤波:均值、方框、中值、高斯
- 剑指offer_第13题_调整数组顺序使奇数位于偶数前面
- 相机模型--A Unifying Theory for Central Panoramic Systems and Practical Implications
- Zookeeper的功能以及工作原理
- shopping car 2.0
- python教程:super()的用法
- 以大多数人的努力程度之低,根本轮不到去拼天赋
- 一个很不错的LINUX基本操作归纳
- LeetCode 559. N叉树的最大深度
- 算法入门经典-第七章 例题7-2最大乘积
- git : 上传大文件或者PDF或者二进制文件导致无法上传
- ashx 使用Session
- kindle看pdf乱码_Kindle 中文书名 目录 乱码 解决办法
- 淘宝小程序开发注意点
- NodeJS必知基础知识(非巨详细)
- 电商项目需求分析---七月实习总结
- 北理工2013《Java程序设计》课程设计要求
- cfg80211 subsystem中的wiphy
- SAP IDES 下载指南
- 5年以上旧电脑如何升级