当前位置:首页 > 技术文章 > 正文内容

Vue父子组件参数传递方法(vue父子组件传参方式)

zonemu2个月前 (07-08)技术文章24

在 Vue 中,父子组件之间的参数传递是常见的需求,主要通过 Props自定义事件 实现。以下是详细说明和代码示例:


一、父组件向子组件传递参数(Props)

父组件通过 属性 向子组件传递数据,子组件通过 props 接收。

1. 子组件定义 Props

vue

<!-- ChildComponent.vue -->

<template>

<div>

<p>接收父组件的参数: {{ parentData }}</p>

</div>

</template>


<script>

export default {

props: {

// 基础类型检查 + 默认值

parentData: {

type: String,

default: '默认值'

}

}

}

</script>

2. 父组件传递数据

vue

<!-- ParentComponent.vue -->

<template>

<div>

<ChildComponent :parent-data="message" />

</div>

</template>


<script>

import ChildComponent from './ChildComponent.vue';


export default {

components: { ChildComponent },

data() {

return {

message: '来自父组件的数据'

}

}

}

</script>

关键点:

  • 使用 :parent-data(动态绑定)传递数据。
  • 子组件中 props 的命名推荐 kebab-case(如 parent-data),在子组件中转换为 camelCase(如 parentData)。

二、子组件向父组件传递参数(自定义事件)

子组件通过 $emit 触发事件,父组件通过 v-on 监听事件并接收数据。

1. 子组件触发事件

vue

<!-- ChildComponent.vue -->

<template>

<button @click="sendDataToParent">传递数据给父组件</button>

</template>


<script>

export default {

methods: {

sendDataToParent() {

this.$emit('child-event', '来自子组件的数据');

}

}

}

</script>

2. 父组件监听事件

vue

<!-- ParentComponent.vue -->

<template>

<div>

<ChildComponent @child-event="handleChildEvent" />

<p>接收子组件的参数: {{ childData }}</p>

</div>

</template>


<script>

import ChildComponent from './ChildComponent.vue';


export default {

components: { ChildComponent },

data() {

return {

childData: ''

}

},

methods: {

handleChildEvent(data) {

this.childData = data; // 接收子组件传递的数据

}

}

}

</script>

关键点:

  • 使用 @child-event 监听子组件事件。
  • 子组件通过 this.$emit('事件名', 数据) 触发事件。

三、其他常用方式

1. 使用 ref 直接访问子组件

父组件通过 ref 获取子组件实例,直接调用子组件的方法或访问数据。

vue

<!-- ParentComponent.vue -->

<template>

<ChildComponent ref="childRef" />

</template>


<script>

export default {

mounted() {

this.$refs.childRef.childMethod(); // 调用子组件方法

console.log(this.$refs.childRef.childData); // 访问子组件数据

}

}

</script>

2. 使用 v-model 实现双向绑定(Vue 2/3 语法不同)

Vue 2:

vue

<!-- 父组件 -->

<ChildComponent v-model="message" />


<!-- 子组件 -->

<script>

export default {

props: ['value'],

methods: {

updateValue(newVal) {

this.$emit('input', newVal); // 触发 input 事件

}

}

}

</script>

Vue 3:

vue

<!-- 父组件 -->

<ChildComponent v-model:title="message" />


<!-- 子组件 -->

<script setup>

defineProps(['title']);

defineEmits(['update:title']);

</script>


四、注意事项

  1. 单向数据流:Props 是单向的,子组件不应直接修改父组件传递的值。若需要修改,可通过事件通知父组件。
  2. 事件命名规范:自定义事件名推荐使用 kebab-case(如 update-data)。
  3. 复杂场景:跨层级组件通信可使用 Vuex/Pinia(状态管理)或 provide/inject。

通过以上方法,可以灵活实现 Vue 父子组件之间的参数传递。根据场景选择合适的通信方式!

相关文章

Win+Ubuntu缝合怪:第三方开发者推出“Wubuntu”Linux发行版

IT之家 2 月 26 日消息,一位第三方开发者推出了一款名为“Wubuntu”的缝合怪 Linux 发行版,系统本身基于 Ubuntu,但界面为微软 Windows 11 风格,甚至存在微软 Win...

迁移GIT仓库并带有历史提交记录(git 迁移仓库)

迁移git仓库开发在很多时候,会遇到一个问题。GIT仓库的管理,特别是仓库的迁移。我需要保留已有的历史记录,而不是重新开发,重头再来。我们可以这样做:使用--mirror模式会把本地的分支都克隆。//...

web前端入门:css+html5+javascript同时学可以吗?

HTML+CSS+JS是前端基础核心知识,肯定是都要学的。在web前端中,HTML是结构标准,CSS是样式标准,JS是行为标准,三者缺一不可。说的直白点,HTML就是骨架,CSS就是皮肤,JS就是灵魂...

前端学习又一大里程碑:html5+js写出歌词同步手机播放器

需要完整代码和视频请评论后加前端群470593776领取javascript进阶课题:HTML5迷你音乐播放器学习疲惫了,代码敲累了,听听自己做的的音乐播放器,放松与满足知识点:for循环语句,DOM...

15款测试html5响应式的在线工具(测试类h5)

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面...

不产生新的数组,删除数组里的重复元素

数组去重的方式有很多,我们可以使用 Set 去重、filter 过滤等,详见 携程&蘑菇街&bilibili:手写数组去重、扁平化函数 ,但三种解法(Set、filter、reduce...