当前位置: 首页 > 知识库问答 >
问题:

vue.js - Vue+vuetify如何封装一个高复用的新建/编辑侧边弹窗?

夔宏深
2023-11-30

简述:目前准备要做页面重构,现有的弹窗样式要弃用,要改成侧边弹窗,最先尝试的是封装一个公共弹窗组件,通过传参,父组件向子组件传值的形式实现新建或编辑功能,但是面临一个问题,有非常多的接口,每个页面都有不同的新建和编辑的API接口,但是我又不想把这些接口都放在公共组件里面,感觉复用性不高,大佬们有啥办法吗~~~

正在尝试处理接口的放置

共有1个答案

太叔繁
2023-11-30

听你的描述是解决多个接口不放在公共组件里,那只要把接口作为参数传进来就行了呀
封装一个公共组件,设置(例子不完整)

const props = defineProps({    addApi: Function,    updateApi: Function,    dataKey: {        type: String,        default: 'id'    },    beforeSubmit: Function,    afterSubmit: Function,})const formData = ref({})const loading = ref(false)const isEdit = computed(() => {    return Boolean(formData[props.dataKey])}) // 通过id判断是否是编辑还是新增// 在表单提交方法里async function submit(){    const msg = isEdit.value?'编辑成功':'新增成功'    const api = isEdit.value? props.updateApi : props.addApi    const params = {...formData.value} // 必要时深度克隆    // 如果需要在提交前额外处理    props.beforeSubmit && props.beforeSubmit(params)    loading.value = true    const res = await api(params).finally(()=> loading.value = false)    // 下面自己写了    // ElMessage.success(msg)    // visible.value = false    // emit('success')    // 如果需要在提交后额外处理    props.afterSubmit && props.afterSubmit(params)}
 类似资料:
  • 如何更好的设计一个公共的新增、编辑页面? 需求如下:假设有一个新增、编辑功能,在很多页面都需要能够点击按钮,调用公共的添加页面,这个时候,我想到的办法是,通过按需加载的方式,把添加页面放到 app.vue 里面,然后配合vuex,设计一个数字变量,在需要触发弹框的页面,使这个变量+1,然后再app.vue监听这个数字的变化,如果变化,则调用弹框, 请问这一块是否有更好的实现思路? 问题二: 如果这

  • 组件是vuetify,做了个带transition效果的侧边弹窗,放了个表格和分页组件,但是刷新页面第一次进去的时候,分页页码没有缩略,,多的话直接遍布整个网页,但是当我缩放网页或者随机点击某一个页码就会恢复正常,给v-pagination设置total-visible,设为6,正常的是这样子的,感觉是宽度没有做限制的问题,但是侧边弹窗做了宽度限制,分页不应该自适应宽度吗,实在找不出啥原因,求大佬

  • vue-vuetify怎么实现表格单元格可编辑,并且能获取到输入的值呢?

  • 本文向大家介绍vue如何安装使用Quill富文本编辑器,包括了vue如何安装使用Quill富文本编辑器的使用技巧和注意事项,需要的朋友参考一下 本文为大家记录了vue中安装使用Quill富文本编辑器的具体方法,供大家参考,具体内容如下 1、安装依赖 注:我在已有的vue项目中(含有已安装的依赖,即node_modules文件夹)直接进行安装并不成功,报错,没有截图,但是我没记错的话是显示"项目名\

  • v-bottom-sheet 咋个实现从侧边平滑出入呢? 求解

  • 问题:所以我用这个npm包react qr扫描仪扫描我PWA中的qr码。现在这是一个基于react的包。react组件(只是一个示例)如下所示: 好的,上面显示的“部分”具有从videoPreviewStyle对象应用的元素级css样式。现在我想做的是定制这个部分。现在,我认为唯一的方法是实际更改npm安装文件(在node_modules文件夹中)。我试过了,但没有成功(我不知道为什么,所以如果你