vueで要素フォーム検証を使用する方法

不言
リリース: 2018-07-14 15:54:49
オリジナル
3854 人が閲覧しました

この記事は主に Vue での要素フォーム検証の使用方法を紹介します。必要な友達に参考にしてください。

前回の記事は についてです。 async-validator の基本要素、つまり Element での使用方法とエレガントな使用方法については、この記事に記載されています。

前の記事で述べたように、async-validator は 3 つの主要な部分で構成されます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中定义<el-form :model=&#39;form&#39;>:model='form',那个form就是sourcesource的字段名,如source.name就是form.name,那么只要在<el-form-item prop=&#39;name&#39;>设置和source一样的字段名name,就可以匹配<el-form :rules=&#39;rules&#39;>中的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: &#39;string&#39;, required: true } }

  • 数组的方式: { name: [{ type: &#39;string&#39; }, { required: true }] }

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

  • Options

  • 検証

  • ルール

基本的な検証プロセスは次のとおりです。

validator.validate は、上記の に対応します。 this.$refs[refName].validate< in Element /code> ですが、変更されています。そして、<code><el-form :model='form'>:model='form' が Element で定義されており、その form ソースです。 source.name などの source のフィールド名は form.name であり、<el-form- item prop= 'name'><el-form :rules='rules と一致するように、フィールド名 <code>namesource と同じに設定します。 '> ;rules.name in ;。

非常に重要な点です。rules.Field name は、検証する前に source.Field name と同じである必要があります。 🎜
// 返回一个规则数组,必填且字符串长度在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) 関数が、form 要素の DOM ノードの属性に追加されました。それから、上記の悪い点があります。つまり、ルールの定義方法が十分に柔軟ではありません。 🎜🎜たとえば、firstNamelastName という 2 つのフィールドがあります。 firstName は必須ですが、lastName はオプションです。firstName の長さは 1 より大きく 4 未満である必要があります。一方、lastName >1 より大きく 6 未満である必要があります。次に、2 つの異なるルールを記述する必要があります。これは 2 つのフィールドだけであり、異なる要件を持つフィールドが多数ある場合は、多数の異なるルールを記述する必要があります。迷惑ではありませんか?再利用できますか? 🎜🎜ルールを定義する 3 つの方法🎜
  • 🎜関数メソッド: { name(rule, value, callback, source, options ) {} }🎜
  • 🎜オブジェクトメソッド: { name: { type: 'string'、required: true } }🎜
  • 🎜配列メソッド: { name: [{ type: 'string' }, { required: true }] }🎜
🎜Function メソッドは、必要に応じて非常に強力です options は関数の形式で使用できます。最も一般的に使用されるのはオブジェクトと配列です。現在、いくつかの再利用方法が推奨されています。 🎜🎜一般的に使用されるルールをいくつかカプセル化します🎜rrreee🎜ルールとチェーン呼び出し用に特別に作成されたクラスをカプセル化します🎜rrreee🎜 以上がこの記事の全内容です。その他の関連コンテンツについては、こちらをご覧ください。 PHP中国語ネットに注目! 🎜🎜 関連する推奨事項: 🎜🎜🎜Vue の要素フォーム検証の基本要素🎜🎜🎜🎜🎜 Vue のオブジェクト内で属性が非負の整数である問題を解決する方法🎜🎜🎜

以上がvueで要素フォーム検証を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!