转:http://www.cnblogs.com/gsgs/p/6753682.html

element-ui的官网上写的自定义表单验证,方法都是写在单vue文件中的,不容易共享。怎么使用vuex将方法共享出来,各个组件都能用呢?

如下是一个验证age的数据,

rules:{

  age:[{required:true,trigger:'blur',validator:checkAge}]

}

required:true  指提示必须要填,也就是input那个红色星星,必填的标志,对数据是不影响的。

trigger:‘blur’,当失去焦点就进行一次验证。

validator:checkAge  我这儿我定义了一个checkAge函数,写在data中return的前面。这个其实只是个传参函数

思路:当失去焦点,会使validator验证会调用一次checkAge函数。并且会给checkAge默认传参数,checkAge(rules,value,callback){},value是input框中的内容,callback是回调函数。这3个参数是关键,必须要传给vuex store中的验证函数。

这儿要提醒一点:store中传过来的共享方法,并不是实实在在的方法,不管是map或者dispatck出来的,都不是原始方法,也就是说,不能如下这么干:

methods:map['checkAge'],
mounted(){
  this.rules.age[0].validator=this.checkAge //这样出错,这个checkAge不是正常的方法,被包装过。如果是state数据是可以直接这样干的。
}

因此,写一个转换函数:

data(){
  let checkAge=(rules,value,callback)=>{ //转换函数,主要目的是传给store内方法的参数。
    this.$store.dispatch('checkAge',{rules,value,callback})//这儿的checkAge是写在store中的,vuex规定参数必须传对象。
  }
  return {
    rules:{
      age:[{required:true,trigger:'blur',validator:checkAge}]//主要格式是标准json。
    },
    msg:{
      age:''
    }
  }
}

剩下的只需要在store中的actions内写上验证方法就行了。

//store中写:
let actions = {
checkAge({ commit }, obj) {//这个obj就是需要的参数,这个blur事件经过validator包装后的参数。随后的就跟官网上的一样了,随意写。
if (!obj.value) {
obj.cb(new Error('年龄不能为空'))
} else if (typeof obj.value != 'number') {
obj.cb(new Error('年龄必须为数字'))
} else {
if (obj.value > 100) {
obj.cb(new Error("年龄要打破记录了"))
} else if (obj.value < 0) {
obj.cb(new Error('年龄小了点,无法接受'))
} else {
obj.cb()
}
}
commit('dd')
}
}
let mutations={
  dd(){}
}
export default new Vuex.Store({
  actions,
  mutations
})
 

【21】vuex 与element iu表单校验的更多相关文章

  1. element的表单校验自动定位到该位置

    遇到的项目问题是在每个折叠面板里边都有不同的表单,用element上的校验时,若有没填写的表单或不符合表单格式的要求,则自动展开该折叠面板,且页面定位到没校验成功的表单   this.$refs.fo ...

  2. js--吐血总结最近遇到的变态表单校验---element+原生+jq+easyUI(前端职业生涯见过的最烦的校验)

    最近写了无数各种形式的表单,记录下奇奇怪怪的校验规则~ 一:首先是element自带的rules校验规则: element作为常用框架,自带rules属性简单易懂,官方文档一目了然,不再赘述,应付常用 ...

  3. vue+element表单校验功能

    要实现这个功能其实并不难,element组件直接用就可以, 但是我在使用过程中碰到了几个坑,就记录下来,分享给大家,避免落坑,话不多说,直接上过程...... 表单校验功能:   实现这个功能,总共分 ...

  4. js-动态表单校验-吐血总结最近遇到的变态表单校验2---element+原生

    上一部分总结了基础常用的js表单校验,包括原生以及框架,下面来总结这一个月涉及到的动态校验: 动态表单校验大致分为三种情况: 1. 首先是固定校验规则,但是表单组件是动态生成的,例如:在表单或者表格里 ...

  5. Vue Element-ui表单校验规则,你掌握了哪些?

    1.前言   Element-ui表单校验规则,使得错误提示可以直接在form-item下面显示,无需弹出框,因此还是很好用的.   我在做了登录页面的表单校验后,一度以为我已经很了解表单的校验规则. ...

  6. 深入了解Element Form表单动态验证问题 转载

    随风丶逆风 2020-04-03 15:36:41  2208  收藏 3 分类专栏: Vue 随笔 文章标签: 动态验证 el-form elementUI 表单验证 版权 在上一篇<vue ...

  7. 利用jquery.validate以及bootstrap的tooltip开发气泡式的表单校验组件

    表单校验是页面开发中非常常见的一类需求,相信每个前端开发人员都有这方面的经验.网上有很多成熟的表单校验框架,虽然按照它们默认的设计,用起来没有多大的问题,但是在实际工作中,表单校验有可能有比较复杂的个 ...

  8. AngularJS 1.2.x 学习笔记(表单校验篇)

    https://my.oschina.net/cokolin/blog/526911 摘要: 本文首发于 blog.csdn.net/vipshop_ebs/article/details/39472 ...

  9. bootstrap+jQuery.validate表单校验

    谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...

随机推荐

  1. C# 创建和初始化集合对象

    一. 引言 C# 3.0中新的对象初始化器是一种简单的语法特征-借助于这种特征,对象的构建和初始化变得非常简单.假定你有一个类Student,它看起来有如下样子: public class Stude ...

  2. 前端异常日志监控 - 使用Sentry

    背景 现在的前端项目越来越复杂,在不同的客户端会产生各种在开发人员机器上不会出现的问题.当用户报告一个问题给开发人员的时候,开发人员无法直接定位问题.在此前,听过一次鹅厂的前端人员,他们对QQ里面的网 ...

  3. 操作系统(2)_进程管理_李善平ppt

    所有程序都有CPU和io这两部分,即使没有用户输入也有输出. CPU最好特别忙,io空闲无所谓. 程序/数据/状态 三个维度来看进程. 等待的资源可能是io资源或者通信资源(别的进程的答复). 一个进 ...

  4. JS起源

    一.初始JavaScript Mosaic是互联网历史上第一个普遍使用和显示图片的浏览器1993年问世. 后来由于商标权转让,原本的开发团队又开发了Netscape Navigetor网景浏览器,也是 ...

  5. HTTP-点开浏览器输入网址背后发生的那点事

    前言 Internet最早来源于美国国防部ARPANet,1969年投入运行,到现在已有很长一段路了,各位想要了解发展史可以百度下,这里就不多说了. 现如今当我们想要获取一些资料,首先是打开某个浏览器 ...

  6. thinkphp 3.2.3 程序执行时序图

  7. Linux下启动、停止xampp命令

    启动xampp: /opt/lampp/./lampp start 停止xampp: /opt/lampp/./lampp stop 卸载xampp: rm -rf /opt/lampp

  8. MySQL批量插入大量数据方法

    在MySQL数据库中,如果要插入上百万级的记录,用普通的insert into来操作非常不现实,速度慢人力成本高,推荐使用Load Data或存储过程来导入数据,我总结了一些方法分享如下,主要基于My ...

  9. Flask学习笔记:数据库迁移操作flask-script+alembic/flask-migrate

    数据库迁移是将代码中模型类(即表)的修改同步到数据库中, flask-sqlalchemy的模型类一旦使用create_all()映射到数据库中后,对这个模型类的修改(例如添加了一个新的字段)就不会再 ...

  10. 用django实现邮件发送

    settings配置 EMAIL_HOST = 'smtp.qq.com' # 如果是163换成stmp.163.com EMAIL_PORT = 465 # qq邮箱的端口 EMAIL_HOST_U ...