今天我们来讨论一下中Vue3父子组件的传值:教你修改父子组件传输到子组件的值。
众所周知,vue具有单向数据流的传输特性。当您在子组件中修改父组件传输的数据时,控制台会报告错误,并表示不允许您修改父组件传输的值。
2.然后,为了解决这个问题,尤大大在vue3的时候给了我们一个新的想法:v-model可以实现父传子,子也可以修改父组件传输的数据。
3. 大家都看到了,我给大家提供了两个修改父组件数据的想法(不限于vue3):
方法一:父传子采用v-model,子组件修改父组件传输值。
方法二:用Pinia或vuex进行状态管理,然后修改数据。
v用于自定义组件-model
父组件:
- ///这是从父组件中引入的子组件
- <ChildrenView v–model:num=“num”/>
- //定义数据
- let num=ref(10);///定义num为10,传输给子组件
子组件:
- <script setup>
- ///子组件接收父组件传递的数据
- let props=defineProps({
- num:number;
- });
- console.log(props.num)///接收到的数据num=10
- //重点:开始修改子组件传输的num
- //1.介绍我们的 **emit(自定义事件名,传递的数据)** 触发自定义事件的函数
- //2.使用emit()
- let emit=defineEmits([“update:num”]);///自定义更新num事件
- //3.假设子组件中有一个按钮执行changenum事件
- let changeNum=()=>{
- emit(“update:num”,100);///触发自定义事件,将父组件的num修改为100
- }
- </script>
注意:
1.每个人都必须有疑问。这个emit()不是子传父用的吗?那么这个update就不应该绑定在父组件上了。:num吗?
以下:父组件:<ChildrenView v-model:num="num" @update:num="changeNum" >
是的,确实是子传父用的,但是你不需要再绑定了@update:num了。
why?
因为特大大在自定义组件上使用了v-model,所以你只需要emit(“定义updatete”:“值”,数据)可以修改父组件的值
总结:
使用步骤如下:
1.父组件中的子组件绑定自定义属性num
2.子组件接收propsnum
3.emit事件的子组件定义,事件被称为update:值 —defineEmits([“update:num”])
4.执行emit() —-emit(“自定义事件update”:num子传父的价值)
- ///这里的“值”和v-model:值 保持一致,即:v-model:num emit(“update:num”)
- let emit=defineEmits([“update:值”])
- emit(“update:值”,子传父的数据),执行即修改父组件传递的值
评论0