vue父子组件传值
1、父子组件传值:
(1)先在父组件中给子组件的自定义属性绑定一个父组件的变量
<template class="father">
<child :自定义属性名="父组件的变量"></child>
</template>
(2)在子组件的props属性中可以提取出父组件给的值,props中的变量用法和data中变量用法完全一样,只不过值的来源不同
export default {
name:"child",
props: ["自定义属性名"],
data() {}
}
2、子父组件传值:
(1)先在父组件中给子组件的自定义属性绑定一个父组件的函数
<template class="father">
<child @自定义事件="父的处理函数">
<template >
export default {
name: "father",
data() {}
methods:{
父的处理函数(参数){
//参数:得到子组件触发事件($emit)时,传递过来的数据
}
}
})
(2)在子组件中 this.$emit(“父的处理函数”,this.数据) 触发父组件中的函数进行传参
在子组件里用$emit向父组件触发一个事件,父组件监听这个事件
父组件:
<template>
<div>
<child @fMethod="fatherMethod"></child>
</div>
</template>
<script>
import child from '~/components/dam/child';
export default {
components: {
child
},
methods: {
fatherMethod(data) {
console.log(data);
}
}
};
</script>
子组件:
<template>
<div>
<button @click="childMethod()">点击</button>
</div>
</template>
<script>
export default {
methods: {
childMethod() {
this.$emit('fMethod',data);
}
}
};
</script>
3、兄弟组件传值:
方法概括:先创建一个事件中心,相当于中转站,可以用它来传递事件和接收事件
(1)创建全局空Vue实例:eventBus
import Vue from 'vue';
const eventBus= new Vue() //创建事件总线
export default eventBus;
(2)具体页面使用$emit发布事件 - 传递值
import eventBus from '@u/eventBus'
eventBus.$emit('send',‘hello’)
(3)具体页面使用$on订阅事件 - 接收组件值
import eventBus from '@u/eventBus'
eventBus.$on('send', msg => { console.log(msg) //控制台输出 hello }
注意:emit发布事件后所有组件都可以emit事件放在mounted钩子函数中,等待子组件创建并emit发布事件
(4)$off()移除事件监听
import eventBus from '@u/eventBus'
eventBus.$off('send')
注意:事件订阅功能eventBus对象完成的,与组件无关,如果用v-if销毁组件的时候,会形成闭包,造成内存泄漏,所有要在销毁组件的时候进行取消监听事件
childrenu与ref的区别:
(1)$parent方法是在子组件中可以直接访问该组件的父实例或组件。
在父组件中定义一个切换显示页面执行中的显示方法。
switchLoadPage(msg) {
if(!this.loading && msg)
this.loadtext=msg;
this.loading = !this.loading;
},
####在子组件中直接通过$parent去调用该方法
`this.$parent.switchLoadPage();`
###(2)$children方法是在父组件中可以直接访问子组件的实例,但是不保证子组件的顺序。
###(3) ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例。
例如:在父组件中自定义一个表格组件,给子组件加上 ref 属性
`<result ref="result" :config="dgConfig" ></result>`
例如:在父组件中就可以通过this.$refs.result去找到result子组件进行操作,比如把父组件的sdata直接放入子组件中
methods: {
info(){
this.$refs.result.sdata = this.sdata;
},
}
父组件给子组件传值
子组件给父组件传值
兄弟组件中使用EventBus传参
路由间传值
通过refs传参
通过
##1. 父组件给子组件传值
示例:子组件
// children
父组件
组件二{{msg}}
```
##4. 路由间传值
###(1)使用?传值
```
// a页面(?后传参)
this.route.query.name
```
###(2)使用:传值
```
// 路由配置
{
path: '/B/:name',
name: B,
component: () => import('../views/B.vue')
}
// 通过this.$route.params.name获取
```
###(3)父子传值
```
// parent页面
children页面(通过setMsg函数获取传入的参数值)
{{ msg }}
```
##6. 通过依赖注入provide和inject给后代
父组件
```
{{ name }}
```
##7.祖传孙使用$attrs
```
// GrandParent
// parent
组件一:{{name}}
// children 父组件传来的参数值为:{{ msg }}
组件二{{name}} {{age}} {{value}}
```
##8. 孙传祖使用$listeners
GrandParent.vue
```
// GrandParent
```
parent.vue
```
// parent
```
children.vue
```
// children
```
##9. parent获取父组件的实例,拿到父组件data中的参数
父组件
```
```
子组件
```
```
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)