vue组件之间进行传值的方法

作者:KinHKin 时间:2024-04-27 15:48:04 

前言

目前在做vue的项目,用到了子组件依赖其父组件的数据,进行子组件的相关请求和页面数据展示,父组件渲染需要子组件通知更新父组件的state,父子组件之间的传值一般有三种方法:

父传子子传父非父子传值

注意:

父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息。

 接下来,我们会通过实例代码来看的更清晰,理解更容易:

1.父组件向子组件进行传值

vue组件之间进行传值的方法

 父组件代码:

<template>
 <div>
   父组件:
   <el-input v-model="val" style="width:300px" />
   <child :value="val" />
 </div>
</template>

<script>
 import child from './child.vue'

export default {
   name: 'Parent',
   data() {
     return {
       val: '我是父组件'
     }
   },
   components: {
     child
   },

}
 </script>

子组件代码:

<template>

<div class="child">
       子组件: {{  value  }}
   </div>

</template>

<script>

export default {
   name: 'App',
   data() {
       return {
       }
   },
   props: ['value']

}
</script>
 <style scoped>
 .child {
     margin-top: 20px;
 }
 </style>

2.子组件向父组件进行传值

vue组件之间进行传值的方法

父组件代码:

<template>
 <div>
   父组件:
   <el-input v-model="val" style="width:300px" />
   <child :value="val" @bindMsg='msgFun' />
 </div>
</template>

<script>
 import child from './child.vue'

export default {
   name: 'Parent',
   data() {
     return {
       val: '我是父组件'
     }
   },
   components: {
     child
   },
   methods: {
     msgFun(childVal) {
       console.log(childVal,'childVal')
       this.val = childVal
     }
   }

}
 </script>

子组件代码:

<template>

<div class="child">
       子组件: {{  value  }}
       <el-button @click="$emit('bindMsg', '我是子组件')">点击改变父组建数据</el-button>
   </div>

</template>

<script>

export default {
   name: 'App',
   data() {
       return {
       }
   },
   props: ['value'],

}
</script>
 <style scoped>
 .child {
     margin-top: 20px;
 }
 </style>

3.非父子组件之间的传值 

.sync可以帮我们实现父组件向子组件传递的数据的双向绑定,所以子组件接收到数据后可以直接修改,并且会同时修改父组件的数据

ref绑定在子组件上,引用的指向就是子组件的实例,父组件可以通过 ref 主动获取子组件的属性或者调用子组件的方法

vue组件之间进行传值的方法

父组件代码:

<template>
 <div>
   父组件:
   <el-input v-model="val" style="width:300px" />
   <el-button @click="childRefClick">父组件ref点击</el-button>
   <child :value="val" @bindMsg='msgFun' :data.sync='data' ref='child' />

</div>
</template>

<script>
 import child from './child.vue'

export default {
   name: 'Parent',
   data() {
     return {
       val: '我是父组件',
       data: ''
     }
   },
   components: {
     child
   },
   methods: {
     msgFun(childVal) {
       console.log(childVal, 'childVal')
       this.val = childVal;

},
     childRefClick() {
       //ref获取子组件实例的属性和方法
       const child = this.$refs.child
       console.log(child.name)

child.childBtnClick("调用了子组件的方法")
     }
   }

}
 </script>

子组件代码:

<template>

<div class="child">
       子组件: {{  value  }}
       <el-button @click="childBtnClick">点击改变父组建数据</el-button>
   </div>

</template>

<script>

export default {
   name: 'App',
   data() {
       return {
           currenData: {}
       }
   },
   props: ['value', 'data'],

methods: {
       childBtnClick(val) {
           console.log(val,'val')
           this.$emit('bindMsg', val || '我是子组件')
       },

},

}
</script>
 <style scoped>
 .child {
     margin-top: 20px;
 }
 </style>

非父子组件之间的传值方式还有slot插槽,vuex数据状态管理器等等

来源:https://blog.csdn.net/weixin_42974827/article/details/126651267

标签:vue,组件,传值
0
投稿

猜你喜欢

  • java连接Access数据库的方法

    2024-01-14 13:41:17
  • 仿豆瓣分页原型(Javascript版)

    2007-11-05 14:04:00
  • Python从数据库读取大量数据批量写入文件的方法

    2024-01-27 14:48:10
  • 浅谈Python中range和xrange的区别

    2021-04-18 14:52:13
  • 利用Python实现学生信息管理系统的完整实例

    2022-03-12 10:35:03
  • Python Requests模拟登录实现图书馆座位自动预约

    2022-01-31 00:25:46
  • 利用Echarts如何实现多段圆环图

    2024-04-28 09:36:22
  • 利用types增强vscode中js代码提示功能详解

    2023-07-15 05:57:08
  • Python实现读取大量Excel文件并跨文件批量计算平均值

    2023-10-21 06:53:12
  • 针对Sqlserver大数据量插入速度慢或丢失数据的解决方法

    2024-01-21 02:54:46
  • python绘制发散型柱状图+误差阴影时间序列图+双坐标系时间序列图+绘制金字塔图

    2023-09-19 17:50:36
  • SQL Server 2005 SSIS技巧:动态目的文件名

    2008-12-05 15:47:00
  • Python使用tkinter模块实现推箱子游戏

    2022-12-06 08:27:49
  • python使用wxpython开发简单记事本的方法

    2022-05-15 18:06:12
  • asp如何定义参数?

    2010-05-16 15:20:00
  • JavaScript中对象property的删除方法介绍

    2024-06-05 09:29:09
  • Apache部署Django项目图文详解

    2023-12-17 06:51:05
  • 深入解析python中的实例方法、类方法和静态方法

    2022-07-23 09:05:57
  • Python中的延迟绑定原理详解

    2022-07-08 16:18:35
  • SQL语句单引号与双引号的使用方法

    2024-01-22 11:35:09
  • asp之家 网络编程 m.aspxhome.com