在Vue3.0中,采用了proxy,让很多数据不能直接引用,多的不说直接上解决方法
首先引入toRefs import { toRefs } from "vue";
props:{
str:String,
obj:Object,
num:Number
}
setup(props){
//让后在setup中将用toRefs把props转化成被ref包裹的数据
const { str, obj} = toRefs(props);
//这样你就可以在setup中使用str 和 obj两个值了
let mystr = str.value;
let myobj = obj.value;
//记住使用时要用 .value ;
return {
props
}
}
在父组件中
//template部分
<template>
<sin-table @handleGetData = "getData" :fatherData="fatherData" />
//通过vue数据传递原理把fatherData传给子组件
</template>
//script部分
import {ref} from "vue"
setup(){
let fatherData = ref(‘‘);
const getData = (data) => {
fatherData.value = data; //这里是通过子组件传过来的数据修改fatherData;
}
}
在子组件中
//script部分
props:{ fatherData:String }
setup(props,ct) {
const changeChildData = (childData) = {
//通过emit把childData传给父组件
ct.emit("handleGetData",childData);
//这样就实现了,父子组件的双向数据绑定
}
return { props }
}
如果fatherData为Object数据,内部子集内容可以直接在子组件中修改,或通过v-model修改
例如:
import {toRefs} from "vue";
props:{ fatherData:Object };
setup(){
const {fatherData} = toRefs(props);
fatherData.value[0].name = ‘新狗‘;
return {
props
}
}
原文:https://www.cnblogs.com/xiaoshanmuyu/p/14882836.html