>  기사  >  웹 프론트엔드  >  vue에서 요소 양식 유효성 검사를 사용하는 방법

vue에서 요소 양식 유효성 검사를 사용하는 방법

不言
不言원래의
2018-07-14 15:54:493855검색

이 글은 주로 Vue에서 요소 폼 검증을 사용하는 방법을 소개합니다. 이제 특정 참고 가치가 있습니다. 도움이 필요한 친구들이 참고할 수 있습니다.

요소 폼 검증(2)

이전 글은 The async-validator의 기본 요소이므로 Element에서 사용하는 방법과 우아하게 사용하는 방법은 이 문서에 있습니다. async-validator的基本要素,那么,如何使用到Element中以及怎样优雅地使用,就在本篇。

上篇讲到async-validator由3大部分组成

  • Options

  • Validate

  • Rules

基本验证流程如下

  • 先按照rule的规则,制定每个字段的规范,生成rules

  • 根据rules生成验证器const validator = new Validator(rules)

  • 验证器有验证函数validator.validate(source, callback)

  • source中的字段对应规则中的字段,全都通过或出错后调用callback

上面中的validator.validate对应Element中的this.$refs[refName].validate,只不过被改装过的。而且在Element中定义6318c82ba75c0d37c9e07a5e3a190627:model='form',那个form就是sourcesource的字段名,如source.name就是form.name,那么只要在bca042cba593f1573cf694560c9ca72b设置和source一样的字段名name,就可以匹配6c2c070c39c65767ded6e6164e80272c中的rules.name

很重要的一点,rules.字段名要和source.字段名要一样才会验证。

<template>
  <el-form :model=&#39;form&#39; ref=&#39;domForm&#39; :rules=&#39;rules&#39;>
    <el-form-item prop=&#39;name&#39; lable=&#39;名字&#39;>
      <el-input v-model=&#39;form.name&#39;>
    </el-form-item>
  </el-form>
</template>
export default {
  data() {
    this.rules = {
      name: { type: &#39;string&#39;, required: true, trigger: &#39;blur&#39; }
    }

    return {
      form: {
        name: &#39;&#39;
      }
    }
  },
  methods: {
    submit() {
      this.$refs.domForm.validate(valid => {
        if (!valid) {
          // 验证不通过
        }

        // 验证通过后的处理...
      })
    }
  }
}

上面中validate(callback)函数已经添加到form元素DOM节点上的属性中。然后上面还有一个不好的一点。那就是规则的定义方式不够灵活。

比如我有两个字段firstNamelastNamefirstName是必填的,而lastName是非必填的;且firstName长度要求大于1小于4而lastName要求大于1小于6。那么就要写两个不同的规则,现在只是2个字段而已,没什么,如果有很多个不同要求的字段,那要写很多个不同的规则,也要写很多个规则?岂不是很烦?能不能复用?

Rules三种定义方式

  • 函数的方式:{ name(rule, value, callback, source, options) {} }

  • 对象的方式: { name: { type: 'string', required: true } }

  • 数组的方式: { name: [{ type: 'string' }, { required: true }] }

函数的方式很强大,如果需要用到options

이전 글에서 언급했듯이 async-validator는 3가지 주요 부분으로 구성됩니다

옵션

  • 검증

  • 규칙

  • 기본 검증 과정은 다음과 같습니다.

    validator.validate에 해당합니다. this.$refs[refName].validate가 수정되었습니다. 그리고 <code>62fc52efcba6176fb61d86a6f2591ed5:model='form'은 Element에 정의되어 있습니다. 즉, form 소스입니다. source.name과 같은 source의 필드 이름은 form.name이고 0c64042e5b670433cde3e01e9378c389196398e4dd0eb6ad78d0a0beb37c99ab<code>rules.name in ;. 🎜🎜매우 중요한 점은 rules.Field 이름source.Field 이름과 동일해야 인증이 가능하다는 것입니다. 🎜
    // 返回一个规则数组,必填且字符串长度在2~10之间
    export const name = (msg, min = 2, max = 10, required = true) => ([
      { required, message: msg, trigger: &#39;blur&#39; },
      { min, max, message: `长度在${min}~${max}个字符`, trigger: &#39;blur&#39; }
    ])
    
    // 邮箱
    export const email = (required = true) => ([
      { required, message: &#39;请输入邮箱&#39;, trigger: &#39;blur&#39; },
      { type: &#39;email&#39;, message: &#39;邮箱格式不对&#39;, trigger: &#39;blur&#39; }
    ])
    
    /* 自定义验证规则 */
    
    // 大于等于某个整数
    const biggerAndNum = num => (rule, v, cb) => {
      const isInt = /^[0-9]+$/.test(v)
      if (!isInt) {
        return cb(new Error(&#39;要求为正整数&#39;))
      }
    
      if (v < num) {
        return cb(new Error(`要求大于等于${num}`))
      }
      return cb()
    }
    
    export const biggerInt = (int, required = true) => ([
      { required, message: &#39;必填&#39;, trigger: &#39;blur&#39; },
      { validator: biggerAndNum(int), trigger: &#39;blur&#39; }
    ])
    export default class CreateRules {
      constructor() {
        super()
        this.rules = []
      }
    
      need(msg = &#39;必填&#39;, trigger = &#39;blur&#39;) {
        this.rules.push({
          required: true,
          message: msg,
          trigger
        })
        return this
      }
      
      url(message = &#39;不是合法的链接&#39;, trigger = &#39;blur&#39;) {
        this.rules.push({
          type: &#39;url&#39;,
          trigger,
          message
        })
        return this
      }
    
      get() {
        const res = this.rules
        this.rules = []
        return res
      }
    }
    
    const createRules = new CreateRules()
    
    //规则
    const needUrl = createRules.need().url().get()
    const isUrl = createRules.url().get()
    
    // imgUrl必填且是链接;href可选不填,如果填写必须是链接
    const rules = {
      imgUrl: needUrl,
      href: isUrl
    }
    
    // deep rule 定义
    // urls是数组,长度大于1
    // urls的元素是链接
    const urls = [&#39;http://www.baidu.com&#39;, &#39;http://www.baidu.com&#39;]
    
    const rules = {
      urls: {
        type: &#39;array&#39;,
        min: 1,
        defaultField: isUrl
      }
    }
    🎜위의 validate(callback) 함수가 양식 요소의 DOM 노드 속성에 추가되었습니다. 그러면 위에 나쁜 점이 있습니다. 즉, 규칙이 정의되는 방식은 충분히 유연하지 않습니다. 🎜🎜예를 들어 firstNamelastName 두 개의 필드가 있습니다. firstName은 필수이고 lastName은 선택 사항이며 firstName의 길이는 1보다 크고 4보다 작아야 합니다. 반면 lastName은 >1보다 크고 6보다 작아야 합니다. 그러면 두 가지 다른 규칙을 작성해야 합니다. 이제 필드는 2개뿐입니다. 요구 사항이 다른 필드가 많으면 다른 규칙도 많이 작성해야 합니까? 짜증나지 않나요? 재사용이 가능한가요? 🎜🎜규칙을 정의하는 세 가지 방법🎜
    • 🎜함수 메서드: { name(rule, value, callback, source, options ) {} }🎜
    • 🎜객체 메서드: { 이름: { 유형: '문자열', 필수: true } }🎜
    • 🎜 배열 방법: { 이름: [{ type: 'string' }, { 필수: true }] }🎜
    🎜Function 방법은 필요한 경우 매우 강력합니다. 옵션은 함수 형태로 사용될 수 있으며, 가장 일반적으로 사용되는 것은 객체와 배열입니다. 이제 여러 재사용 방법이 권장됩니다. 🎜🎜일반적으로 사용되는 몇 가지 규칙을 간단히 캡슐화합니다.🎜rrreee🎜규칙 및 체인 호출을 위해 특별히 작성된 클래스를 캡슐화합니다.🎜rrreee🎜위 내용은 모두의 학습에 도움이 되기를 바랍니다. PHP 중국어 넷에 주목하세요! 🎜🎜 관련 권장사항: 🎜🎜🎜Vue에서 요소 양식 유효성 검사의 기본 요소🎜🎜🎜🎜🎜Vue에서 객체에 대해 속성이 음수가 아닌 정수인 문제를 해결하는 방법🎜🎜🎜

    위 내용은 vue에서 요소 양식 유효성 검사를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.