VUE中父子组件之间传值

VUE 中父组件向子组件传值

直接贴代码了,这里是片段代码,仔细看并尝试写一下应该是没有问题的。

父组件:
<template>
<div>
	<companyInfo ref="companyInfo" :companyinfo="companyinfo" ></companyInfo>
</div>	
</template>
<script>
import companyInfo from "src/components/companyInfo.vue" 
export default {
        components: {
            companyInfo,
        },
		data(){
   			 return{
       		 companyinfo: {},  // 显示公司信息
		},
}
</script>
子组件:
<template>
	<div class="healthyState"> 状态:{{ companyinfo.healthyState}}</div>
</template>
<script>
export default {
        name: "companyInfo",
		data(){
    		return{
       		 	companyDatas:{
					healthyState:”健康”
				}
			}
		},
		props:['companyinfo'],
}
</script>

这里父组件通过 ":companyinfo=“companyinfo” 方式将值传入子组件,父组件值改变子组件值随之改变。子组件则通过props(值为数组类型)方式接收父组件值。

VUE中子组件向父组件传值
子组件:
<script>
export default {
        name: "companyInfo",
        data() {
            return {
                companyInfo_show: true, 
            }
        },
		methods: {
       		closePop() {
          		 this.$emit("upBottom", 0);
     		  }
       },
}
</script>
父组件:
<template>
<div>
	<companyInfo ref="companyInfo" :companyinfo="companyinfo" @upBottom="updateBottom($event)"></companyInfo>
</div>
</template>
<script>
export default {
        components: {
            companyInfo
        },
        mounted() {
           let show = this.$refs.companyInfo.companyInfo_show;
        },
		methods: {
			updateBottom(val) {
    			document.getElementById("bottom").style.bottom = val + 'vh';
			}
		}
}
</script>

子组件中通过$emit()方式进行传值,第一个参数为方法为方法名,第二参数为需要传的值,父组件中则通过引入的子组件模板调用。

注:upBottom子组件中的方法,$event为子组件传过来的值。

这种方式或许复杂了些,但根据当时的需求来这种方法可以很好的解决的问题。还有以一种方式 通过this.$refs.companyInfo.companyInfo_show来获取子组件的值 这种方式似乎更简便一些。

Vue 3 中,父子组件之间的数据递主要有以下几种方式: 1. **props** (属性绑定): 父组件通过 props 向子组件递数据。父组件将数据作为属性递给子组件,然后在子组件内通过 prop 的名称来接收这个数据。这是单向的数据流,防止了修改父组件的状态。 ```javascript // 父组件 <template> <child-component :value="parentValue"/> </template> <script> export default { data() { return { parentValue: 'default value' }; }, }; </script> // 子组件 <template> <div>{{ value }}</div> </template> <script> export default { props: ['value'], }; </script> ``` 2. **自定义事件($emit/$on)**: 如果需要双向绑定,或者在子组件状态改变时通知父组件,可以使用自定义事件 $emit 和 $on。子组件触发 `$emit('some-event', data)`,父组件监听并处理这个事件。 ```javascript // 父组件 <template> <child-component @childEvent="handleChildEvent" /> </template> <script> methods: { handleChildEvent(data) { this.parentValue = data; } } </script> // 子组件 <template> <button @click="$emit('childEvent', newValue)">Change Value</button> </template> ``` 3. **ref 和 computed** (引用属性和计算属性): 当需要在子组件内部访问或修改递过来的数据时,可以使用 ref。如果需要基于子组件的数据动态计算出新的,可以用 computed。 ```javascript // 父组件 <template> <child-component :value="parentValueRef.value" /> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, setup() { const parentValueRef = ref(''); // ... }, }; </script> // 子组件 <template> <input v-model="localValue" @input="$emit('update:value', localValue)"> </template> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值