封装element的dialog

5 篇文章 0 订阅

因为项目需要,好多页面都需要一样的文件导入弹出框。为了以后的方便使用,,,所以就你懂的~

<template>
  <!--- .sync为了同步数据 ---->
  <el-dialog
    :title="title"
    :visible.sync="openCardDialog"    
    width="50%"
  >
  </el-dialog>
</template>
<script>
  export default {
	  props: {
	    visible: {
	      type: Boolean,
	      default: false
	    }
	  },
	  data() {
	    return {
	      title: '导入数据',
	      active: 1
	    }
	  },
	  computed: {
	    // 通过计算属性绑定组件的openCardDialog和传值的visible,子组件的openCardDialog改变也同样修改到父组件中的值
	    openCardDialog: {
	      get() {
	        return this.visible
	      },
	      set(val) {
	        // openCardDialog改变的时候通知父组件
	        this.$emit('update:visible', val)
	        // 使用update更新属性值,并且在父组件中使用.sync就可以同步更新父组件数据
	      }
	    }
	  }
	}
</script>

这一次dialog的封装对我来说新奇的是通过计算属性来控制封装的弹窗的显示隐藏

条件因素:

  1. vue2.0
  2. element:2.15.5
  3. vscode
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Vue Element 封装 dialog 组件的示例: ```vue <template> <el-dialog :visible.sync="dialogVisible" :title="title" :width="width" :height="height" :before-close="beforeClose"> <slot></slot> <div slot="footer"> <el-button @click="cancel">取消</el-button> <el-button type="primary" @click="confirm">确定</el-button> </div> </el-dialog> </template> <script> export default { name: 'MyDialog', props: { title: { type: String, default: '' }, width: { type: String, default: '50%' }, height: { type: String, default: 'auto' } }, data() { return { dialogVisible: false } }, methods: { // 打开对话框 open() { this.dialogVisible = true }, // 关闭对话框 close() { this.dialogVisible = false }, // 确定操作 confirm() { this.$emit('confirm') this.close() }, // 取消操作 cancel() { this.$emit('cancel') this.close() }, // 关闭前的操作 beforeClose(done) { this.$emit('beforeClose', done) } } } </script> ``` 使用示例: ```vue <template> <div> <el-button @click="openDialog">打开对话框</el-button> <my-dialog :title="dialogTitle" :width="dialogWidth" :height="dialogHeight" @confirm="handleConfirm" @cancel="handleCancel" @beforeClose="handleBeforeClose"> <div>这是对话框内容</div> <div>可以放置任何内容</div> </my-dialog> </div> </template> <script> import MyDialog from '@/components/MyDialog' export default { name: 'MyPage', components: { MyDialog }, data() { return { dialogTitle: '对话框标题', dialogWidth: '60%', dialogHeight: 'auto' } }, methods: { openDialog() { this.$refs.dialog.open() }, handleConfirm() { console.log('点击了确定') }, handleCancel() { console.log('点击了取消') }, handleBeforeClose(done) { console.log('关闭前的操作') done() } } } </script> ``` 在该组件中,我们使用了 Vue Element 中的 dialog 组件,并在其基础上封装了一些常用的功能,例如: - 可以通过 props 自定义对话框的标题、宽度和高度; - 可以通过默认插槽放置任何内容; - 可以通过事件监听点击确定和取消按钮的操作,并在关闭对话框前执行一些操作。 在使用时,只需要像使用 Vue Element 中的 dialog 组件一样,在需要使用对话框的地方加入 `MyDialog` 组件,并通过 props 自定义对话框的样式和标题,然后在需要打开对话框的地方调用 `open()` 方法即可。同时,我们也可以在父组件中监听对话框的确认、取消、关闭前等事件,并执行相应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值