• 如何对element弹窗进行二次封装


    方式一使用$refs

    个人比较喜欢用这种的 通过$refs打开的同时 还能给弹窗组件传参 一些框架使用的也是这种方式

    父组件

    <template>
      <div>
        <el-button type="text" @click="handleDialogOpen">打开嵌套表单的 Dialog</el-button>
        <Dialog ref="Dialog"></Dialog>
      </div>
    </template>
    
    <script>
    import Dialog from '@/components/Dialog.vue'
    export default {
      components: {
        Dialog
      },
      data() {
        return {
        }
      },
      methods: {
        handleDialogOpen() {
          this.$refs.Dialog.open('打开弹窗')
        }
      },
      mounted() {
      }
    }
    </script>
    
    <style lang="less" scoped></style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    子组件

    <template>
     <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
      <el-form :model="form">
        <el-form-item label="活动名称" :label-width="formLabelWidth">
          <el-input v-model="form.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="活动区域" :label-width="formLabelWidth">
          <el-select v-model="form.region" placeholder="请选择活动区域">
            <el-option label="区域一" value="shanghai"></el-option>
            <el-option label="区域二" value="beijing"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
      </div>
    </el-dialog>
    </template>
    
    <script>
    export default {
      data () {
        return {
          dialogFormVisible: false,
          form: {
            name: '',
            region: '',
            date1: '',
            date2: '',
            delivery: false,
            type: [],
            resource: '',
            desc: ''
          },
          formLabelWidth: '120px'
        }
      },
      methods: {
        open(value) {
          console.log(value, '父组件传递过来的值')
          this.dialogFormVisible = true
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    
    </style>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    方式二 封装弹窗内的内容 弹窗组件直接放在父组件中

    父组件

    <template>
      <div>
        <el-button type="text" @click="handleDialogOpen">打开嵌套表单的 Dialog</el-button>
        <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
          <dialogForm/>
        </el-dialog>
      </div>
    </template>
    
    <script>
    import dialogForm from '@/components/form.vue'
    export default {
      components: {
        dialogForm
      },
      data() {
        return {
          dialogFormVisible: false
        }
      },
      methods: {
        handleDialogOpen() {
          this.dialogFormVisible = true
        }
      },
      mounted() {
      }
    }
    </script>
    
    <style lang="less" scoped></style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    子组件

    <template>
      <el-form :model="form">
        <el-form-item label="活动名称" :label-width="formLabelWidth">
          <el-input v-model="form.name" autocomplete="off"></el-input>
        </el-form-item>
        <el-form-item label="活动区域" :label-width="formLabelWidth">
          <el-select v-model="form.region" placeholder="请选择活动区域">
            <el-option label="区域一" value="shanghai"></el-option>
            <el-option label="区域二" value="beijing"></el-option>
          </el-select>
        </el-form-item>
      </el-form>
    </template>
    
    <script>
    export default {
      data () {
        return {
          form: {
            name: '',
            region: '',
            date1: '',
            date2: '',
            delivery: false,
            type: [],
            resource: '',
            desc: ''
          },
          formLabelWidth: '120px'
        }
      },
      methods: {
        open(value) {
          console.log(value, '父组件传递过来的值')
          this.dialogFormVisible = true
        }
      }
    }
    </script>
    
    <style lang="scss" scoped>
    
    </style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    其他方式可自行探索

  • 相关阅读:
    NAS私有云存储 - 搭建Nextcloud私有云盘并公网远程访问
    ```,```中间添加 # + 空格 + 空行后遇到的底部空行出错,书接上回,处理空行
    构建微服务的准备
    Java项目:JSP中华传统美食网站平台管理系统
    使用 Redis 和 Lua 实现分布式锁
    基于Springboot+Vue开发建筑工地用料管理系统
    【Linux】关于普通用户无法使用sudo指令的解决方案
    Leetcode 【1155. 掷骰子等于目标和的方法数】
    GANs综述
    mvn deploy tongweb-embed-7.0.E.5_P3 依赖上传
  • 原文地址:https://blog.csdn.net/weixin_42343307/article/details/134346758