Vue中父子组件传值的方式

本文详细介绍了Vue.js中父组件与子组件之间的数据传递方法,包括如何通过props将数据从父组件传递到子组件,以及如何利用ref在父组件中访问子组件的属性和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

父组件向子组件传值

  1. 父组件调用子组件时,在标签上绑定动态属性
<template>
    <div id='parent'>
        <v-child :title='title' :run='run'></v-child>
    </div>
</template>

<script>
import Child from './Child.vue';
	
export default{
	data(){
		return{
			msg:'',
			title:'我是Parent组件的值'
		}
	},
	methods:{
		run(data){
			alert('我是Parent组件的run方法 --' + data);
		}
	},
	components:{
		'v-child': Child
	}
}
</script>

     2.子组件通过props方式接受父组件传来的值

<template>
	<div id="child">
	    <p>{{title}}</p>
        <button @click="run(123)">点击查看父组件的方法</button>
	</div>
</template>

<script>
  export default{
  	data(){
  		return{
  			
  		}
  	},
  	props:{
  		title: String,  //在props中可以对传来的数据进行类型验证
  		run: Function,
  	}
  }
</script>

子组件向父组件传值

      1. 调用子组件时定义一个ref,如下
          <v-child ref='child'><v-child>

      2. 在父组件里通过以下方式接收子组件的值
           this.$refs.child.属性
           this.$refs.child.方法

<template>
	<div id="parent">
		<v-child ref='child'></v-child>
		<button @click='getChildData()'>获取子组件的数据</button>
		<br />
		<button @click='getChildFunction()'>获取子组件的方法</button>
	</div>
</template>

<script>
	
import Child from './Child.vue';
	
  export default{
  	data(){
  		return{
  			msg: ''
  		}
  	},
  	methods:{
  		getChildData(){
  			alert(this.$refs.child.msg); //获取子组件的msg
  		},
  		getChildFunction(){
  			this.$refs.child.run();  //获取子组件的run方法
  		}
  	},
  	components:{
  		'v-child':Child
  	}
  }
</script>

这只是基础的父子组件传值方式,其它方式会在后面进行补充

### Vue 3 父子组件教程 在 Vue 3 中,父子组件之间的数据递主要通过 `props` 和 `emit` 实现。父组件可以通过 `props` 将数据递给子组件,而子组件则可以通过 `emit` 触发事件将数据回给父组件。 #### 父组件向子组件 父组件可以使用 `props` 向子组件递数据。以下是一个完整的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent :value="inputValue" @update:value="handleInput" /> </div> </template> <script setup> import { ref } from 'vue'; import ChildComponent from './ChildComponent.vue'; // 定义父组件的数据 const inputValue = ref('初始'); // 处理子组件的更新事件 const handleInput = (newValue) => { inputValue.value = newValue; }; </script> ``` 在此示例中,父组件通过 `:value` 将数据递给子组件,并监听 `update:value` 事件以接收子组件的更新[^1]。 #### 子组件向父组件 子组件可以通过 `emit` 方法将数据发送回父组件。以下是子组件的实现: ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits(['update:modelValue']); const updateValue = (event) => { emit('update:modelValue', event.target.value); }; </script> ``` 在这个例子中,子组件通过监听 `input` 事件来捕获用户的输入,并通过 `emit` 方法触发 `update:modelValue` 事件将新递给父组件。 #### 使用 `v-model` 简化双向绑定 Vue 3 支持通过 `v-model` 实现父子组件之间的双向绑定。以下是如何结合 `v-model` 使用的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent v-model="inputValue" /> </div> </template> <script setup> import { ref } from 'vue'; import ChildComponent from './ChildComponent.vue'; const inputValue = ref('初始'); </script> ``` ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits(['update:modelValue']); const updateValue = (event) => { emit('update:modelValue', event.target.value); }; </script> ``` 通过 `v-model`,父组件和子组件之间的数据绑定变得更加简洁和直观。 #### 注意事项 - 父组件向子组件递数据时,确保 `props` 的类型与数据一致。 - 子组件向父组件递数据时,推荐使用标准化的事件名称(如 `update:modelValue`),以便代码更具可读性[^2]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值