怎么在vue中利用mixin优化表单验证插件

  介绍

这篇文章将为大家详细讲解有关怎么在vue中利用mixin优化表单验证插件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

<强> 1。实际开发中遇到的问题

在上面的文章中提及了一些表单插件的问题,主要针对的是插件开发本身存在的问题。下面我总结下使用中存在的问题:

每个使用表单校验的元素都需要添加,<代码> v-check>

必须在提交表单按钮上使用,<代码> v-checkSubmit> submit()>

无法在一个组件里面多次使用校验函数,无法自定义校验的表单范围。(严重问题)

<强> 2。对问题进行分析

一开始我的目标是按照之前计划的方向,研究如何使用事件订阅发布来实现表单校验,但是评估之后这种方式会对现有的代码改动较大,因为我项目已经几处用了当前的校验方法,遂放弃这个方向。

经过查阅资料和思考,我发现vue本身是没有直接处理,生成dom元素的api。所以当前的这种方法(根据校验结果添加类名,输入错误,并追加错误信息元素)虽然不优雅,但是确实最简单有效的方式了。在这个基础上针对上面列出的几个问题,我分别整理了解决的思路:

<代码> v-check

<强> 3。实现

绑定自定义指令的时候添加<代码>,v-check

import  Vue 得到& # 39;vue # 39;   export  default  {   安装:大敌;(Vue,选项),=祝辞,{   ,Vue.directive (& # 39; validateParams& # 39;,, {   插入才能:function  (el,绑定,vNode), {   ,/*   *,才能解决办法只需添加下面这一行代码即可   *,才能el即为当前指令绑定的元素,classList.add可以给元素添加类名   ,*/el.classList.add才能(& # 39;v-check& # 39;);   el.addEventListener才能(& # 39;模糊# 39;,,function (事件),{//,,,…   })才能   ,,}   ,});   ,}   }

定义公共的表单校验方法

如何在vu <代码> e打印稿> //, mixin.ts   import {组件的不同之处是,Vue },得到& # 39;vue-property-decorator& # 39;;   @ component ({})   export  class  Demo  extends  Vue  {   ,public 答:string =, & # 39;一个# 39;;   ,public  doSomething  (), {   ,}   }//组件   & lt; template>   & lt;/template>   & lt; script  lang=皌s"祝辞   import {,组件,Vue, Mixins },得到& # 39;vue-property-decorator& # 39;;   {},Demo  import 得到& # 39;mixin.ts& # 39;;   @ component ({})   export  class  App  extends  mixin(演示),{   ,private 创建(),{   ,console.log (this.A);,//,会打印出   ,}   }   & lt;/script>

下面我们实践,在表单插件中定义这个被mixin的校验方法

@ component ({})   export  class  ValidatorMixin  extends  Vue  {   ,/*   ,*定义一个GValidate方法,可以接受一个元素节点参数   *大敌;参数定义了表单函数校验的范围   ,*/,public  GValidate (validateEl ?: HTMLElement), {   ,//默认是查找当前组件实例内的.v-check元素,这个。美元el表示当前组件   ,let  elements =,。美元el.querySelectorAll (& # 39; .v-check& # 39;);   ,if  (, validateEl ), {//,才能有参数时,规定了校验的范围   elements 才能=,validateEl.querySelectorAll (& # 39; .v-check& # 39;);   ,}   ,const  evObj =, document.createEvent(& # 39;事件# 39;);   ,evObj.initEvent(& # 39;模糊# 39;,,真的,,真的);   ,if (元素),{   for 才能;(const  element  of 元素),{   element.dispatchEvent才能(evObj);   ,,}   ,}   ,//还是查找.input-error元素,以此来判断检验结果   ,let  errorInputs =,。美元el.querySelectorAll (& # 39; .input-error& # 39;);   ,if  (validateEl), {   errorInputs 才能=,validateEl.querySelectorAll (& # 39; .input-error& # 39;);   ,}   ,//将校验的结果返回   ,if  (errorInputs.length  !==, 0), {   return 才能;假;   ,}else  {   return 才能;真实;   ,}   ,}   }

定义了上面的校验方法之后,可以将原插件里面定义,<代码> v-checkSubmit>

<强> 4。优化后的使用

怎么在vue中利用mixin优化表单验证插件