Vue+Element实现封装抽屉弹框

 更新时间:2023年06月12日 09:00:54   作者:山水有轻音  
这篇文章主要为大家详细介绍了如何利用Vue和Element实现简单的抽屉弹框效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

一进行showDrawer()封装

新建dialog.js

// 弹框模板
import Vue from 'vue';
import { Drawer } from 'element-ui';
const modalTemplate = `
  <el-drawer :visible.sync="visible" :title="title" :size="size" :direction="direction">
    <component :is="component" v-bind="props" @ok="handleOk" @cancel="handleCancel"></component>
  </el-drawer>
`
// 弹框构造函数
const ModalConstructor = Vue.extend({
  template: modalTemplate,
  data() {
    return {
      visible: false,
      title: '',
      size: '70%',
      direction: 'rtl',
      component: null,
      props: null,
      resolve: null,
      reject: null,
    }
  },
  methods: {
    show(component, props, options) {
      this.visible = true
      this.component = component
      this.props = props || {}
      this.title = options.title || '提示'
      this.size = options.width || '70%'
      this.direction = options.direction || 'rtl'
      return new Promise((resolve, reject) => {
        this.resolve = resolve
        this.reject = reject
      })
    },
    hide() {
      this.visible = false
    },
    handleOk(res) {
      this.resolve(res)
      this.hide()
    },
    handleCancel() {
      this.reject()
      this.hide()
    },
  },
})
// 创建组件实例并挂载到文档中
const Modal = new ModalConstructor().$mount()
document.body.appendChild(Modal.$el)
// $showDrawer 方法
Vue.prototype.$showDrawer = function (component, props, options) {
  return Modal.show(component, props, options)
}
// $showDialog 方法
Vue.prototype.$showDialog = function (component, props, options) {
  return new Promise((resolve, reject) => {
    let MyDialogConstructor = Vue.extend({
      components: {
        'my-dialog': component
      },
      template: `<el-dialog :visible.sync="visible" :title="title" :width="width" :before-close="beforeClose">
                    <my-dialog :props="props" @ok="handleOk" @cancel="handleCancel"></my-dialog>
                  </el-dialog>`,
      data() {
        return {
          visible: true,
          title: options.title || '提示',
          width: options.width || '50%',
          props: props,
          resolve: resolve,
          reject: reject,
        }
      },
      methods: {
        hide() {
          this.visible = false
        },
        handleOk(res) {
          this.resolve(res)
          this.hide()
        },
        handleCancel() {
          this.reject()
          this.hide()
        },
        beforeClose(done) {
          ElementUI.MessageBox.confirm('确认关闭?').then(() => {
            done()
          }).catch(() => {})
        },
      },
    })
    let MyDialog = new MyDialogConstructor().$mount()
    document.body.appendChild(MyDialog.$el)
  })
}

在上面的代码中,我们首先定义了一个 modalTemplate 模板,使用 Element UI 的 Drawer 和组件插槽来实现弹框内容的展示,并添加了一些我们需要的属性和方法。 然后定义了一个 ModalConstructor 构造函数,通过 show 方法来打开弹框,并返回 Promise 来等待用户的操作,最后返回用户的操作结果。

在 show 方法中,我们通过传入组件和 props 的方式来动态渲染组件,并设置其他选项,如弹框的标题、大小、方向等。

## 2在main.js里引入dialog.js
```js
import '@util/dialog'

如何使用

// 调用 $showDrawer 方法
this.$showDrawer(ExamDetail, {
  examId: rowId
}, {
  title: '考试详情',
  width: '1200px',
}).then(() => {
  this.searchForm()
})
// 调用 $showDialog 方法
this.$showDialog(ExamDetail, {
  examId: rowId
}, {
  title: '考试详情',
  width: '1200px',
}).then(() => {
  this.searchForm()
})

到此这篇关于Vue+Element实现封装抽屉弹框的文章就介绍到这了,更多相关Vue Element抽屉弹框内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue如何设置描点跳转到对应页面

    vue如何设置描点跳转到对应页面

    这篇文章主要介绍了vue如何设置描点跳转到对应页面问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Vue版本vue2.9.6升级到vue3.0的详细步骤

    Vue版本vue2.9.6升级到vue3.0的详细步骤

    vue版本升级相信大家应该都遇到过,下面这篇文章主要给大家介绍了关于Vue版本vue2.9.6升级到vue3.0的详细步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • vue项目npm run build打包dist文件及打包后空白解决办法

    vue项目npm run build打包dist文件及打包后空白解决办法

    npm run build 这个命令会执行Vue CLI中预定义的打包配置,并将打包后的文件存放在"dist"文件夹中,这篇文章主要给大家介绍了关于vue项目npm run build打包dist文件及打包后空白的解决办法,需要的朋友可以参考下
    2023-10-10
  • VUE3刷新页面报错问题解决:Uncaught SyntaxError:Unexpected token '<'

    VUE3刷新页面报错问题解决:Uncaught SyntaxError:Unexpected token &apo

    这篇文章主要介绍了VUE3刷新页面报错:Uncaught SyntaxError: Unexpected token ‘<‘,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • 手写实现Vue计算属性

    手写实现Vue计算属性

    这篇文章主要介绍了手写实现Vue计算属性,本文从一个简单的计算属性例子开始,一步步实现了计算属性。并且针对这个例子,详细分析了页面渲染时的整个代码执行逻辑,需要的小伙伴可以参考一下
    2022-08-08
  • Vue+ElementUI实现动态更换任意主题色(动态换肤)的全过程

    Vue+ElementUI实现动态更换任意主题色(动态换肤)的全过程

    众所周知Element-UI有换肤功能,下面这篇文章主要给大家介绍了关于Vue+ElementUI实现动态更换任意主题色(动态换肤)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Vue前端书写规范大全(非常详细!)

    Vue前端书写规范大全(非常详细!)

    在团体开发项目中,为了团队所有成员书写可维护的代码,而不是一次性的代码,让团队当中其他人看你的代码能一目了然,下面这篇文章主要给大家介绍了关于Vue前端书写规范的相关资料,需要的朋友可以参考下
    2023-01-01
  • vue.js 添加 fastclick的支持方法

    vue.js 添加 fastclick的支持方法

    今天小编就为大家分享一篇vue.js 添加 fastclick的支持方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • vue中如何实现复制内容到剪切板详解

    vue中如何实现复制内容到剪切板详解

    有些业务需求需要点击按钮复制链接,下面这篇文章主要给大家介绍了关于vue中如何实现复制内容到剪切板的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-10-10
  • vue前端实现下载文件功能

    vue前端实现下载文件功能

    这篇文章主要介绍了vue前端实现下载文件功能,本文给大家介绍多种方式,感兴趣的朋友跟随小编一起看看吧
    2024-10-10

最新评论