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.js 中的实用工具方法【推荐】

    Vue.js 中的实用工具方法【推荐】

    这篇文章主要介绍了Vue.js 中的实用工具方法,本文是小编日常开发中常用的一些工具方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • vue2.x,vue3.x使用provide/inject注入的区别说明

    vue2.x,vue3.x使用provide/inject注入的区别说明

    这篇文章主要介绍了vue2.x,vue3.x使用provide/inject注入的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue路由对不同界面进行传参及跳转的总结

    vue路由对不同界面进行传参及跳转的总结

    这篇文章主要介绍了vue路由对不同界面进行传参及跳转的总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 如何使用Vue3+Vite+TS快速搭建一套实用的脚手架

    如何使用Vue3+Vite+TS快速搭建一套实用的脚手架

    Vite是一个面向现代浏览器的一个更轻、更快的 Web 应用开发工具,下面这篇文章主要给大家介绍了关于如何使用Vue3+Vite+TS快速搭建一套实用脚手架的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • Vue源码分析之虚拟DOM详解

    Vue源码分析之虚拟DOM详解

    所谓虚拟DOM就是为了解决浏览器性能问题而被设计出来的。如前,若一次操作中有 10 次更新 这篇文章主要给大家介绍了关于Vue源码分析之虚拟DOM的相关资料,需要的朋友可以参考下
    2021-05-05
  • vue实现简单无缝滚动效果

    vue实现简单无缝滚动效果

    这篇文章主要为大家详细介绍了vue实现简单无缝滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • vue中解决el-date-picker更改样式不生效问题

    vue中解决el-date-picker更改样式不生效问题

    在使用Vue.js进行前端开发的过程中,Element UI 是一个非常流行的UI库,它提供了一套完整的组件来快速搭建美观的用户界面,但是我们经常遇到一个问题使用Element UI提供的el-date-picker组件时,尝试自定义其样式却无法生效,所以本文给大家介绍如何解决这个问题
    2024-10-10
  • vue实现简易计时器组件

    vue实现简易计时器组件

    这篇文章主要为大家详细介绍了vue实现简易计时器组件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • 详解Vue3 Composition API中的提取和重用逻辑

    详解Vue3 Composition API中的提取和重用逻辑

    这篇文章主要介绍了Vue3 Composition API中的提取和重用逻辑,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • vue单元格多列合并的实现

    vue单元格多列合并的实现

    这篇文章主要介绍了vue单元格多列合并的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论