Vue3之父子组件异步props数据的传值方式

 更新时间:2025年04月09日 09:48:26   作者:杰迷不写bug  
这篇文章主要介绍了Vue3之父子组件异步props数据的传值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Vue3父子组件异步props数据的传值

在写前端页面时碰到一个问题,就是点击编辑按钮传递这一行信息给子组件编辑页,展示该条数据详细数据;

但还没有点击编辑按钮,其实编辑页已经初始化了,是因为在父组件中已经导入使用了该编辑页;

例如:在 Editor.vue中有这样代码:

let prop = defineProps(["dataInfo"])
console.log(prop.dataInfo);

进入首页时控制台已经运行了这段代码console.log(prop.dataInfo) 并且为空对象;

但是子组件并没有接收到父组件的数据;

原因

是因为如果父组件的props值是通过异步操作获取的,那么在最初渲染子组件时,props可能还没有被赋值。而我正是使用异步操作把值通过props传给子组件的;

代码如下:

在父组件一个函数中给dataInfo赋值:

// 子组件标签
<Editor :dataInfo="dataInfo" ref="EditorRef" @refresh="funFindItemInfo" />

   
let EditorRef = ref()
let dataInfo = ref({}) //传递给编辑页的数据
//编辑按钮
function handlEditor(row) {
  dataInfo.value = row;  // 信息传递到组件
  EditorRef.value.openEditor()  //打开对话框

}

解决方案

这种情况下,可以使用watchEffectwatch来监听props的变化,确保当props值变化时能作出相应的处理。

小结:Vue 3中props的值在组件实例创建初期就被初始化并传递给子组件,并且在组件的整个生命周期内,只要父组件的props数据发生变化,就会触发子组件的相应更新。

总代码如下:

  • 父组件:
// 子组件标签
<Editor :dataInfo="dataInfo" ref="EditorRef" @refresh="funFindItemInfo" />

   
let EditorRef = ref()
let dataInfo = ref({}) //传递给编辑页的数据
//编辑按钮
function handlEditor(row) {
  dataInfo.value = row;  // 信息传递到组件
  EditorRef.value.openEditor()  //打开对话框

}
  • 子组件:
// 标签:
   <el-form-item label="ID">
      <el-input v-model="ItemFormData.id" disabled></el-input>
  </el-form-item>
  <el-form-item label="名字">
      <el-input v-model="ItemFormData.name"></el-input>
  </el-form-item>
  ........


let prop = defineProps(["dataInfo"])
const emit = defineEmits(["refresh"])
let isDialog = ref(false)  // 是否拉开抽屉
let ItemFormData = ref({}) // 数据对象
defineExpose({
  // 对外暴露控制拉开抽屉的方法
  openEditor() {
    isDialog.value = true
  },
});


watch(()=>prop.dataInfo,(newVal,oldVal)=>{
        console.log("新值:",newVal);
        console.log("旧值:",oldVal);
        let {id,name,price,detail,pic,address,createtime} = prop.dataInfo //解构 切断响应
        ItemFormData.value = {id,name,price,detail,pic,address,createtime}
        console.log("dada", ItemFormData.value);
    })

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue使用file-saver插件保存各种格式文件方式

    vue使用file-saver插件保存各种格式文件方式

    这篇文章主要介绍了vue使用file-saver插件保存各种格式文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Vue的生命周期操作示例

    Vue的生命周期操作示例

    这篇文章主要介绍了Vue的生命周期操作,结合实例形式分析了vue生命周期中各个函数的运行步骤,需要的朋友可以参考下
    2019-09-09
  • Vue实现购物车计算总价功能

    Vue实现购物车计算总价功能

    这篇文章主要为大家详细介绍了Vue实现购物车计算总价功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue项目中使用AvueJs的详细教程

    vue项目中使用AvueJs的详细教程

    Avue.js是基于现有的element-ui库进行的二次封装,简化一些繁琐的操作,核心理念为数据驱动视图,主要的组件库针对table表格和form表单场景,这篇文章给大家介绍了vue项目中使用AvueJs的相关知识,感兴趣的朋友跟随小编一起看看吧
    2022-10-10
  • Nuxt不同环境如何区分的方法

    Nuxt不同环境如何区分的方法

    在一般情况下,我们的项目肯定需要区分不同环境,那么Nuxt提供给我们这样的基本能力了么,下面我们就一起来了解一下
    2021-05-05
  • Vue中tab栏切换的简单实现

    Vue中tab栏切换的简单实现

    本文主要介绍了Vue中tab栏切换的简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • vuex在vite&vue3中的简单使用说明

    vuex在vite&vue3中的简单使用说明

    这篇文章主要介绍了vuex在vite&vue3中的简单使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Vue3 setup添加name的方法步骤

    Vue3 setup添加name的方法步骤

    如果你在 vue3 开发中使用了语法的话,对于组件的name属性,需要做一番额外的处理,下面这篇文章主要给大家介绍了关于Vue3 setup添加name的相关资料,需要的朋友可以参考下
    2022-11-11
  • vue3容器布局和导航路由实现示例

    vue3容器布局和导航路由实现示例

    这篇文章主要为大家介绍了vue3容器布局和导航路由实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • vue中keep-alive,include的缓存问题

    vue中keep-alive,include的缓存问题

    这篇文章主要介绍了vue中keep-alive,include的缓存问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论