上一篇
<template> <!-- 第一个抽屉 --> <el-drawer :visible.sync="drawer1" title="主抽屉"> <el-button @click="drawer2 = true">🔍 打开详情抽屉</el-button> </el-drawer> <!-- 第二个抽屉 --> <el-drawer :visible.sync="drawer2" title="详情抽屉"> <p>这里是联动展示内容 ✨</p> </el-drawer> </template> <script setup> import { ref } from 'vue'; const drawer1 = ref(false); const drawer2 = ref(false); </script>
<!-- 父组件 --> <template> <MainDrawer @open-detail="drawer2 = true" /> <DetailDrawer :visible="drawer2" /> </template> <!-- 子组件:MainDrawer.vue --> <template> <el-drawer :visible.sync="visible"> <el-button @click="$emit('open-detail')">🚀 触发联动</el-button> </el-drawer> </template>
<el-drawer v-model="isVisible""自定义标题" :direction="direction" :size="size" :before-close="handleClose" > <!-- 内容区域 --> </el-drawer>
动画增强
/* 添加平滑过渡效果 */ .el-drawer { transition: all 0.3s ease; } .el-drawer-enter-active { transform: translateX(0); } .el-drawer-leave-active { transform: translateX(100%); }
可拖拽扩展(2025新特性)
// 二次封装实现拖拽 const drawerDrag = { mounted(el) { el.addEventListener('mousedown', startDrag); } };
<!-- 子组件 --> <el-button @click="$emit('update:modelValue', true)">触发父组件</el-button> <!-- 父组件 --> <ChildComponent v-model:drawer="drawerState" />
// main.js 全局配置 import mitt from 'mitt'; app.config.globalProperties.$bus = mitt(); // 发送组件 this.$bus.emit('open-drawer', { id: 1 }); // 接收组件 this.$bus.on('open-drawer', (payload) => { this.drawerId = payload.id; });
性能优化
新特性
resize
属性实现动态宽度调整API变更
visible.sync
升级为 v-model
双向绑定before-open
/after-close
生命周期钩子<template> <el-button @click="mainDrawer = true">📦 打开主抽屉</el-button> <el-drawer v-model="mainDrawer" title="主操作面板"> <el-table :data="tableData"> <el-table-column @click="handleRowClick(row)"> <template #default="{ row }"> <span @click="detailDrawer = true">{{ row.name }}</span> </template> </el-table-column> </el-table> </el-drawer> <el-drawer v-model="detailDrawer" title="详情查看"> <pre>{{ selectedRow }}</pre> <el-button @click="mainDrawer = false">↩️ 返回主面板</el-button> </el-drawer> </template> <script setup> import { ref } from 'vue'; const mainDrawer = ref(false); const detailDrawer = ref(false); const selectedRow = ref(null); const tableData = ref([ { id: 1, name: '数据项1' }, { id: 2, name: '数据项2' } ]); const handleRowClick = (row) => { selectedRow.value = row; detailDrawer.value = true; }; </script>
状态管理
props
+$emit
性能优化
v-if
代替v-show
控制抽屉显隐<el-drawer :visible.sync="show"> <async-component v-if="show" /> </el-drawer>
用户体验
通过以上方法,可实现高效、流畅的抽屉联动效果,充分利用Element UI 2025版的最新特性! 🎉
本文由 业务大全 于2025-08-26发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vds.7tqx.com/wenda/733318.html
发表评论