vue列表信息展示中新增数据,与编辑数据页面复用,降低重复代码

简介: vue列表信息展示中新增数据,与编辑数据页面复用,降低重复代码

场景

点击编辑

点击添加员工

这俩其实是用的同一个组件,只不过要进行封装,我这里就基于el-dialog组件封装这种表单弹窗

需要解决的问题

1.动态标题问题

解决方案:通过自定义属性title(名字随便起)在组件挂载时给属性赋值,同时组件内部显示这个标题属性

const props = defineProps({
    staffId: {
        type: Number,
        default: () => null
    },
    title:{
        type:String,
        default: () => null
    }
})

showEdit:用来控制弹窗表单的显示

editStaffId:用来区分是编辑还是新增,编辑需要拿到ID调接口进行数据回显,新增不需要,可以根据需求自己定义标题动态赋值

 <div v-if="showEdit">
        <StaffDetails  :title="editStaffId?'编辑员工':'添加员工'" 
        :staff-id="editStaffId?editStaffId:null"
         @exit-edit-page=" showEdit=false"></StaffDetails>
      </div>

2.底层组件el-dialog自带关闭按钮默认关闭行为问题

(自定义了关闭按钮,并设置el-dialog的show-close属性值为false即不用el-dialog提供的关闭按钮的没有该问题)

因为底层是基于el-dialog组件封装的弹窗关闭按钮默认是显示的,关闭按钮默认点击事件就是关闭自身(把el-dialog的v-model的值修改为false)但是我们是希望这个el-dialog组件是一直显示的,因为我们是基于el-dialog封装的一个弹窗表单组件,我们是直接控制这个弹窗表单组件的显示的,

那我们既然想用这个el-dialog自带的关闭按钮,就要修改这个按钮的点击事件,让他去关闭弹窗表单组件(整个父组件)

解决方案:修改el-dialog的before-close属性(关闭前的回调)改成我们自己的阻止默认关闭行为

//关闭事件
const emit = defineEmits(["exitEditPage"]);
function goBack() {
    emit("exitEditPage");
}

触发这个自定义关闭事件:在回调函数里面设置控制弹窗表单显示的变量值为false,即关闭弹窗表单组件

3.是否数据回显问题

添加不需要回显,编辑需要

解决方案:自定义属性staffId(随便起,我这里的含义是员工id),默认值为null,当这个属性的值不为null时说明需要数据回显,通过判断这个属性就可以处理是否回显的问题了

const props = defineProps({
    staffId: {
        type: Number,
        default: () => null
    },
    title:{
        type:String,
        default: () => null
    }
})

在钩子函数里面做判断

onMounted(()=>{
    if(props.staffId){
        //回显函数
        getEcho(props.staffId)
    }
})

4.动态提交函数问题

点击保存按钮在添加时调用提交添加的函数,编辑是调用提交编辑的函数

解决方案:根据标记是添加还是修改的属性值做判断,我这里的属性是staffId,这个的值存在就是编辑,为默认的null就是添加

<el-button type="primary" @click="props.staffId?submitFormEdit(ruleFormRef):submitFormAdd(ruleFormRef)">保存</el-button>


目录
相关文章
|
1月前
|
缓存 前端开发 大数据
虚拟列表在Vue3中的具体应用场景有哪些?
虚拟列表在 Vue3 中通过仅渲染可视区域内容,显著提升大数据列表性能,适用于 ERP 表格、聊天界面、社交媒体、阅读器、日历及树形结构等场景,结合 `vue-virtual-scroller` 等工具可实现高效滚动与交互体验。
249 1
|
6月前
|
SQL JavaScript 前端开发
Vue实现动态数据透视表(交叉表)
Vue实现动态数据透视表(交叉表)
353 13
|
10月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
342 64
|
6月前
|
JavaScript 前端开发 API
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
一篇文章同时搞定Vue2和Vue3的侦听器,是不是很棒?不要忘了Vue3中多了一个可选项watchEffect噢。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6月前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
10月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
10月前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
334 1
|
10月前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
355 1
|
11月前
|
API
vue3知识点:响应式数据的判断
vue3知识点:响应式数据的判断
83 3
|
JavaScript 前端开发
模拟Vue数据的双向绑定
Vue的数据双向绑定功能一直为人称道, Vue数据的双向数据绑定主要依赖了Object.defineProperty,这里尝试用最简单的代码, 实现数据的双向绑定Demo MVVM ViewModel基本实现原理 Gi...
1150 2