ant-design-vue 实现表格内部字段验证功能


Posted in Javascript onDecember 16, 2019

表格内 column 可输入的需求还是很常见的,尤其有一些业务场景就是表单内部有一个表格,然后表格的某些列是个进行输入的,就像下面这样

  • 下单数量 内容不能为空
  • 下单数量 必须输入正整数

ant-design-vue 实现表格内部字段验证功能

翻阅 ant-design-vue 官网并没有发现说表单内表格字段验证的方案,但是有一个 自行处理表单数据 的介绍

ant-design-vue 实现表格内部字段验证功能

那我们是不是可以参考这个方案去实现咱自己的业务需求呢,下面就开始说一下实现方案

<a-table
 :columns="columns"
 bordered
 :rowKey="col => col.id"
 :dataSource="tableData"
>

 <a-form-item 
  :label-col="{
   xs: { span: 0 },
   sm: { span: 0 },
  }"
  :wrapper-col="{
   xs: { span: 24 },
   sm: { span: 24 },
  }"
  :validate-status="getFildStatus(record.id).validateStatus"
  :help="getFildStatus(record.id).errorMsg"
  slot="goodModelCount" 
  slot-scope="text, record">
  <a-input
   style="width: 100%"
   :min="1"
   v-model="text.goodModelCount"
   @change="handleChange(text.goodModelCount, record.id)"
  />
 </a-form-item>

 <div slot="action" slot-scope="text, record">
  <a href="javascript:;" rel="external nofollow" ><a-icon type="delete" /></a>
 </div>
</a-table>

<script>
const columns = [
 { title: '商品名称', dataIndex: 'id', align: 'center' },
 { title: '商品型号', dataIndex: 'account', align: 'center' },
 { title: '型号价格', dataIndex: 'area', align: 'center' },
 { title: '下单数量', key: 'goodModelCount', align: 'center', width: '200px', scopedSlots: { customRender: 'goodModelCount' }, align: 'center', },
 { title: '操作', scopedSlots: { customRender: 'action' }, width: '150px', align: 'center',}
]

function validatePrimeNumber(number) {
 if (/^[1-9]\d*|0$/.test(number)) {
  return {
   validateStatus: 'success',
   errorMsg: '',
  };
 }
 return {
  validateStatus: 'error',
  errorMsg: '下单数量不能为空',
 };
}
export default {
 name: 'order-dialog',
 data() {
  return {
   visible: true,
   labelCol: {
    xs: { span: 24 },
    sm: { span: 7 },
   },
   wrapperCol: {
    xs: { span: 24 },
    sm: { span: 12 },
   },
   form: this.$form.createForm(this),
   validatorRules: {
    consigneeName: {
     rules: [
      { required: true, message: '请输入收货人姓名' }
     ]
    },
    consigneePhone: {
     rules: [
      { required: true, message: '请输入收货人联系电话' }
     ]
    },
    addresseeAddressDetail: {
     rules: [
      { required: true, message: '请输入收货地址详情' }
     ]
    }
   },
   columns: columns,
   tableData: [{ id: 1, account: 123, area: 123, goodModelCount: 3434}, { id: 2, account: 123, area: 123, goodModelCount: 111}],
   goodModelCountData: []
  }
 },
 methods: {
  getFildStatus(id) {
   const data = this.goodModelCountData.filter(item => id === item.id)[0]
   if (data) {
    return data
   } else {
    return {
     errorMsg: '',
     validateStatus: 'success'
    }
   }
  },

  handleChange(value, id) {
   const newData = [...this.tableData];
   const target = newData.filter(item => item.id === id)[0]
   if (target) {
    const { errorMsg, validateStatus } = validatePrimeNumber(value)
    let flag = true
    this.goodModelCountData.forEach(val => {
     if (val.id === id) {
      flag = false
      val.errorMsg = errorMsg,
      val.validateStatus = validateStatus
     }
    })

    if (flag) {
     this.goodModelCountData.push({
      id,
      errorMsg,
      validateStatus
     })
    }
    target.goodModelCount = value
    this.tableData = newData
   }
  },
  handleOk() {
   this.visible = false
  }
 }
}
</script>

重点注意两个属性:

  • validate-status 校验状态,可选 ‘success', ‘warning', ‘error', ‘validating'
  • help 设置校验文案

在 vue 里面是允许我们在属性里面以 函数 的形式返回属性的,所以我们可以把验证规则放到函数里里面 validatePrimeNumber (函数名字最好还是语义化明确一些,我这边直接复制的官方文档上的)

需要进行验证的字段(需要在 a-table 标签内部)

<a-form-item 
 :label-col="{
  xs: { span: 0 },
  sm: { span: 0 },
 }"
 :wrapper-col="{
  xs: { span: 24 },
  sm: { span: 24 },
 }"
 :validate-status="getFildStatus(record.id).validateStatus"
 :help="getFildStatus(record.id).errorMsg"
 slot="goodModelCount" 
 slot-scope="text, record">
 <a-input
  style="width: 100%"
  :min="1"
  v-model="text.goodModelCount"
  @change="handleChange(text.goodModelCount, record.id)"
 />
</a-form-item>

当我们输入框进行输入的时候我们就会出发 handleChange 方法,在方法里里面我们去进行输入内容的验证,然后根据id从 getFildStatus 找到当前对象,然后进行验证。

如果列表内有多列需要进行验证,那么就需要主要这个数据格式怎么定了了,根据实际需求进行参考

总结

以上所述是小编给大家介绍的ant-design-vue 实现表格内部字段验证功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js字符编码函数区别分析
Jun 05 Javascript
javascript替换已有元素replaceChild()使用介绍
Apr 03 Javascript
js读取json的两种常用方法示例介绍
Oct 19 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
JS模拟的Map类实现方法
Jun 17 Javascript
SelecT下拉框选中和取值的解决方法
Nov 22 Javascript
Bootstrap和Java分页实例第一篇
Dec 23 Javascript
微信小程序开发之toast提示插件使用示例
Jun 08 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
Sep 28 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
微信小程序使用template标签实现五星评分功能
Nov 03 Javascript
layui-select动态选中值的例子
Sep 23 Javascript
js DOM的事件常见操作实例详解
Dec 16 #Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 #Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 #Javascript
javascript自定义右键菜单插件
Dec 16 #Javascript
js中的面向对象之对象常见创建方法详解
Dec 16 #Javascript
js实现数字滚动特效
Dec 16 #Javascript
NUXT SSR初级入门笔记(小结)
Dec 16 #Javascript
You might like
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
phpmailer绑定邮箱的实现方法
2016/12/01 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
jQuery的强大选择器小结
2009/12/27 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
Bootstrap滚动监听(Scrollspy)插件详解
2016/04/26 Javascript
Angular设置title信息解决SEO方面存在问题
2016/08/19 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
详解如何写出一个利于扩展的vue路由配置
2019/05/16 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
Python设置在shell脚本中自动补全功能的方法
2018/06/25 Python
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
聚网科技C++面试笔试题
2015/09/01 面试题
药学专业大学生自荐信
2013/09/28 职场文书
幼儿园安全责任书
2014/04/14 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
学习考察心得体会
2014/09/04 职场文书
简单通用的简历自我评价
2014/09/21 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
公积金具结保证书
2015/05/11 职场文书
运动会200米广播稿
2015/08/19 职场文书
Vscode中SSH插件如何远程连接Linux
2022/05/02 Servers
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android