vue+elementui通用弹窗的实现(新增+编辑)


Posted in Vue.js onJanuary 07, 2021

本文主要介绍了vue+elementui通用弹窗的实现(新增+编辑),分享给大家,具体如下:

vue+elementui通用弹窗的实现(新增+编辑)

组件模板

<el-dialog :title="title" :visible.sync="dialogShow" :close-on-click-modal="false">
  <div class="ym-common-dialog" :class="customClass">
    <div v-for="(col,index) in cols">
      <span><em v-if="!!col.isRequire">*</em>{{col.name}}</span>
      <template v-if="col.type === 'text'">
        <div>{{submitData[col.key]}}</div>
      </template>
      <template v-if="col.type === 'input'">
        <input type="text" v-model="submitData[col.key]" :placeholder="'请输入' + col.name">
      </template>
      <template v-if="col.type === 'radio'">
        <div class="flexX">
        <el-radio v-for="radio in col.data" v-model="submitData[col.key]" :label="radio.label">{{radio.name}}</el-radio>
        </div>
      </template>
      <template v-if="col.type === 'select'">
        <el-select v-model="submitData[col.key]" placeholder="请选择">
          <el-option
          v-for="option in col.data"
          :key="option.value"
          :label="option.label"
          :value="option.value">
          </el-option>
        </el-select>
      </template>
    </div>
  </div>
  <span slot="footer" class="dialog-footer">
    <el-button @click="dialogShow = false">取 消</el-button>
    <el-button type="primary" @click="confirm">确 定</el-button>
  </span>
</el-dialog>

弹窗的内容根据传入的数据去渲染,数据格式如下

cols: [{
  name: '输入框',
  key: 'ccc', // 提交时对应的字段
  type: 'input', // 类型 
  isRequire: true // 是否必填
}, {
  name: '单选框',
  key: 'aaa',
  type: 'radio',
  data: [{
    label: '1',
    name: '长城'
  }, {
    label: '2',
    name: '长安'
  }],
  isRequire: true
}, {
  name: '下拉框',
  key: 'bbb',
  type: 'select',
  data: [{
    value: '选项1',
    label: '黄金糕'
  }, {
    value: '选项2',
    label: '双皮奶'
  }],
  isRequire: true
}],

组件data和props

data() {
  return {
    submitData: {}, // 提交数据集合
    dialogShow: false
  }
},
props: {
  // 弹窗显示/隐藏
  dialogVisible: {
    type: Number,
    default: 0
  },
  // 弹窗Title
  title: String,
  // 自定义样式
  customClass: String,
  // 数据列
  cols: {
    type: Array,
    default: () => []
  },
  // 编辑时传入初始值
  data: {
    type: Object,
    default: () => {}
  }
},

组件数据的监听

watch: {
  dialogVisible(val) {
    if (val > 0) {
      this.dialogShow = true
    }
  },
  data: {
    handler(val) {
      this.submitData = val
    },
    immediate: true
  },
  submitData: {
    // 应对 切换单选框隐藏其他元素的问题
    // 父组件监听到单选框的值变化时,修改cols的值,即可实现元素的隐藏与显示
    handler() {
      this.$emit('change', this.submitData)
    },
    deep: true
  }
}

数据提交以及验证

confirm() {
  // 验证必填项
  let isMust = this.cols.filter(item => item.isRequire).map(item => item.key)
  Object.keys(this.submitData).forEach(key => {
    let index = isMust.indexOf(key)
    if ((index > -1) && this.submitData[key] !== '' && !!this.submitData[key]) {
      isMust.splice(index, 1)
    }
  })
  if (isMust.length > 0) {
    showDefaultTips('请注意必填项!', '', 3)
    return
  }
  this.$emit('complete', this.submitData)
  this.dialogShow = false
}

代码在此

到此这篇关于vue+elementui通用弹窗的实现(新增+编辑)的文章就介绍到这了,更多相关vue elementui 弹窗内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
梳理一下vue中的生命周期
Dec 30 Vue.js
vue导入.md文件的步骤(markdown转HTML)
Dec 31 Vue.js
如何在Vue项目中添加接口监听遮罩
Jan 25 Vue.js
vue-video-player 断点续播的实现
Feb 01 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
Mar 01 Vue.js
使用vue-element-admin框架从后端动态获取菜单功能的实现
Apr 29 Vue.js
解读Vue组件注册方式
May 15 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
vue中使用mockjs配置和使用方式
Apr 06 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
ant design vue的form表单取值方法
Jun 01 Vue.js
详解Vue2的diff算法
Jan 06 #Vue.js
vuex的使用步骤
Jan 06 #Vue.js
vue3.0中友好使用antdv示例详解
Jan 05 #Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 #Vue.js
Vue+scss白天和夜间模式切换功能的实现方法
Jan 05 #Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 #Vue.js
vue3弹出层V3Popup实例详解
Jan 04 #Vue.js
You might like
PHP超级全局变量数组小结
2012/10/04 PHP
php抓取网站图片并保存的实现方法
2015/10/29 PHP
Linux环境下php实现给网站截图的方法
2016/05/03 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
laravel 根据不同组织加载不同视图的实现
2019/10/14 PHP
PHP设计模式入门之状态模式原理与实现方法分析
2020/04/26 PHP
js加解密 脚本解密
2008/02/22 Javascript
IE DOM实现存在的部分问题及解决方法
2009/07/25 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
高效的jquery数字滚动特效
2015/12/17 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
Nodejs进阶之服务端字符编解码和乱码处理
2017/09/04 NodeJs
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
实例说明Python中比较运算符的使用
2015/05/13 Python
分析Python读取文件时的路径问题
2018/02/11 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python range实例用法分享
2020/02/06 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
上海期货面试题
2014/01/31 面试题
企业统计员岗位职责
2013/12/13 职场文书
新年联欢会主持词
2014/03/27 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
群众路线调研报告范文
2014/11/03 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
消防验收申请报告
2015/05/15 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers