vueで要素フォーム検証を使用する方法
この記事は主に 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='form'>
的:model='form'
,那个form
就是source
。source
的字段名,如source.name
就是form.name
,那么只要在<el-form-item prop='name'>
设置和source
一样的字段名name
,就可以匹配<el-form :rules='rules'>
中的rules.name
。
很重要的一点,rules.字段名
要和source.字段名
要一样才会验证。
<template> <el-form :model='form' ref='domForm' :rules='rules'> <el-form-item prop='name' lable='名字'> <el-input v-model='form.name'> </el-form-item> </el-form> </template>
export default { data() { this.rules = { name: { type: 'string', required: true, trigger: 'blur' } } return { form: { name: '' } } }, methods: { submit() { this.$refs.domForm.validate(valid => { if (!valid) { // 验证不通过 } // 验证通过后的处理... }) } } }
上面中validate(callback)
函数已经添加到form元素DOM节点上的属性中。然后上面还有一个不好的一点。那就是规则的定义方式不够灵活。
比如我有两个字段firstName
和lastName
。firstName
是必填的,而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
Options
検証
ルール
- まず、ルールのルールに従って各フィールドの仕様を策定し、ルールを生成します
- それに基づいてバリデータを生成しますrules
const validator = new Validator(rules )
バリデータには検証関数validator.validate(source, callback)
li>
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>name
を source
と同じに設定します。 '> ;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: 'blur' }, { min, max, message: `长度在${min}~${max}个字符`, trigger: 'blur' } ]) // 邮箱 export const email = (required = true) => ([ { required, message: '请输入邮箱', trigger: 'blur' }, { type: 'email', message: '邮箱格式不对', trigger: 'blur' } ]) /* 自定义验证规则 */ // 大于等于某个整数 const biggerAndNum = num => (rule, v, cb) => { const isInt = /^[0-9]+$/.test(v) if (!isInt) { return cb(new Error('要求为正整数')) } if (v < num) { return cb(new Error(`要求大于等于${num}`)) } return cb() } export const biggerInt = (int, required = true) => ([ { required, message: '必填', trigger: 'blur' }, { validator: biggerAndNum(int), trigger: 'blur' } ])
export default class CreateRules { constructor() { super() this.rules = [] } need(msg = '必填', trigger = 'blur') { this.rules.push({ required: true, message: msg, trigger }) return this } url(message = '不是合法的链接', trigger = 'blur') { this.rules.push({ type: 'url', 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 = ['http://www.baidu.com', 'http://www.baidu.com'] const rules = { urls: { type: 'array', min: 1, defaultField: isUrl } }
validate(callback)
関数が、form 要素の DOM ノードの属性に追加されました。それから、上記の悪い点があります。つまり、ルールの定義方法が十分に柔軟ではありません。 🎜🎜たとえば、firstName
と lastName
という 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 }] }
🎜
options
は関数の形式で使用できます。最も一般的に使用されるのはオブジェクトと配列です。現在、いくつかの再利用方法が推奨されています。 🎜🎜一般的に使用されるルールをいくつかカプセル化します🎜rrreee🎜ルールとチェーン呼び出し用に特別に作成されたクラスをカプセル化します🎜rrreee🎜 以上がこの記事の全内容です。その他の関連コンテンツについては、こちらをご覧ください。 PHP中国語ネットに注目! 🎜🎜 関連する推奨事項: 🎜🎜🎜Vue の要素フォーム検証の基本要素🎜🎜🎜🎜🎜 Vue のオブジェクト内で属性が非負の整数である問題を解決する方法🎜🎜🎜以上がvueで要素フォーム検証を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。
