Vueはルールを使用してフォームフィールドの検証を実装します

Vueはルールを使用してフォームフィールドの検証を実装します

Vue でフォーム フィールドを記述および検証する方法は多数あります。このブログでは、より一般的に使用される 3 つの検証方法を紹介します。

1. 検証用のデータを入力する

フォームの内容

<!-- フォーム -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="ユーザー名:" prop="userName">
       <el-input v-model="rulesForm.userName" スタイル="幅:300px" 最大長さ="50"/>
    </el-form-item>
</el-form>
  • <el-form>: これはフォームであることを表す
  • <el-form> -> ref: 参照時のフォームの名前、識別
  • <el-form> -> ルール: フォーム検証ルール
  • <el-form> -> モデル: フォームデータオブジェクト
  • <el-form> -> label-width: フォーム フィールド ラベルの幅。Form の直接の子要素である form-item はこの値を継承します。
  • <el-form> -> <el-form-item>: フォーム内の各サブ要素
  • <el-form-item> -> ラベル: ラベルテキスト
  • <el-form-item> -> prop: フォーム フィールド モデル フィールド。validate メソッドと resetFields メソッドを使用する場合は、この属性が必要です。
  • <el-input>: 入力ボックス
  • <el-input> -> v-model: バインドされたフォームデータオブジェクトのプロパティ
  • <el-input> -> スタイル: インラインスタイル
  • <el-input> -> maxlength: 最大文字数制限

データ

データ() {
    戻る {
        //他のデータ定義を省略します...
        
        // フォーム検証 formRules: {
            ユーザー名: [
                {required: true、message: "ユーザー名を入力してください"、trigger: "blur"}
            ]
        }
    }
}
  • formRules: 上記の「フォームコンテンツ」の <el-form> フォームの :rules 属性値と同じ
  • userName: 上記の「フォームコンテンツ」の <el-form-item> フォームサブ要素の prop 属性値と同じ
  • 検証内容: 必須、フォーカスを失ったときに検証、空の場合、プロンプトメッセージは「ユーザー名を入力してください」

2. インラインで書く

フォームの内容

<!-- フォーム -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="銀行名:" prop="accountName" :rules="[{required:true,message:'銀行名を入力してください',trigger:'blur'}]">
        <el-input v-model="rulesForm.accountName" スタイル="幅:300px" 最大長さ="50"/>
    </el-form-item>
</el-form>
  • <el-form-item> -> ルール: 効果は最初の方法と同じですが、記述方法が異なるため、ここでは詳細には触れません。

データデータには内容がありません

3. 外部定義ルールのインポート

フォームの内容

<!-- フォーム -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item label="銀行カード番号:" prop="accountNumber">
       <el-input v-model="rulesForm.accountNumber" スタイル="width:300px" 最大長さ="19"/>
    </el-form-item>
</el-form>

フォームの内容は最初の方法と一致しているため、ここでは詳細には触れません。

スクリプトの内容

<スクリプト>
// 外部検証ルールの導入 import {validateAccountNumber} from "@/utils/validate";
 
// 銀行カードのアカウントが正しいかどうかを判定する const validatorAccountNumber = (rule, value, callback) => {
  if (!値) {
    return callback(new Error("アカウント情報を入力してください"));
  } それ以外 {
    if (validateAccountNumber(値)) {
      折り返し電話();
    } それ以外 {
      コールバックを返します(新しいエラー('アカウント形式が正しくありません'))
    }
  }
};
 
エクスポートデフォルト{
    データ() {
        戻る {
            //他のデータ定義を省略します...
        
            // フォーム検証 formRules: {
                口座番号: [
                    {必須: true、バリデータ: validatorAccountNumber、トリガー: "blur"}
                ]
            }
        }
    }
}
</スクリプト>
  • インポート: まず外部検証ルールを導入する
  • const: ルール定数を定義します。定数名は変数です。'= (rule, value, callback) => {}' は固定形式です。値パラメータは検証するフィールド値です。
  • formRules -> accountNumber: フォーム検証でバリデータを使用して、カスタム検証ルール定数の名前を指定します。

検証.js

/* 銀行口座 */
エクスポート関数validateAccountNumber(str) {
  定数reg = /^([1-9]{1})(\d{14}|\d{18})$/
  reg.test(str) を返す
}
  • 検証ルール

上記はすべてフォーカスを失ったときの検証です。フォームが送信されたときの検証方法を分析してみましょう。

1. フォームの送信ボタン

<!-- フォーム -->
<el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
    <el-form-item>
        <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
        <el-button @click="cancel">キャンセル</el-button>
    </el-form-item>
</el-form>
  • <el-button>: ボタン
  • <el-button> -> タイプ: ボタンタイプ
  • <el-button> -> @click: ボタンがクリックされたときにトリガーされるイベント。メソッドの入力パラメータは 'rulesForm' であり、<el-form> フォームの rel 属性値と一致している必要があることに注意してください。

2. 方法

メソッド: {
    // 保存 onSubmit(formName) {
        this.$refs[formName].validate(valid => {
            (有効)の場合{
                console.log("送信成功!!");
            }それ以外{
                console.log("送信エラー!!");
            }
        });
    },
    // キャンセル cancel() {
        
    }
}

this.$refs[formName].validate: formNameは渡された「rulesForm」であり、<el-form>フォームのrel属性値と一致しているため、検証が必要なフォームが指定されます。

完全なサンプルコードは次のとおりです。

1. ルール

<テンプレート>
  <div class="アプリコンテナ">
    <el-tabs v-model="アクティブ名">
      <el-tab-pane label="フォーム" name="rulesPane" @tab-click="handleClick">
        <!-- フォーム -->
        <el-form ref="rulesForm" :rules="formRules" :model="rulesForm" label-width="200px">
          <el-form-item label="ユーザー名:" prop="userName">
            <el-input v-model="rulesForm.userName" スタイル="幅:300px" 最大長さ="50"/>
          </el-form-item>
          <el-form-item label="銀行名:" prop="accountName" :rules="[{required:true,message:'銀行名を入力してください',trigger:'blur'}]">
            <el-input v-model="rulesForm.accountName" スタイル="幅:300px" 最大長さ="50"/>
          </el-form-item>
          <el-form-item label="銀行カード番号:" prop="accountNumber">
            <el-input v-model="rulesForm.accountNumber" スタイル="width:300px" 最大長さ="50"/>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="onSubmit('rulesForm')">保存</el-button>
            <el-button @click="cancel">キャンセル</el-button>
          </el-form-item>
        </el-form>
      </el-tab-pane>
    </el-tabs>
  </div>
</テンプレート>
 
<スクリプト>
「@/utils/validate」から{validateAccountNumber}をインポートします。
 
// 銀行カードのアカウントが正しいかどうかを判定する const validatorAccountNumber = (rule, value, callback) => {
  if (!値) {
    return callback(new Error("アカウント情報を入力してください"));
  } それ以外 {
    if (validateAccountNumber(値)) {
      折り返し電話();
    } それ以外 {
      コールバックを返します(新しいエラー('アカウント形式が正しくありません'))
    }
  }
};
 
エクスポートデフォルト{
  名前: 「ルール」、
  データ() {
    戻る {
      アクティブ名: "rulesPane",
      デフォルトプロパティ: {
        子供: 「子供」、
        ラベル: "ラベル"
      },
      ルールフォーム: {
      },
      // フォーム検証 formRules: {
        ユーザー名: [
          {
            必須: true、
            メッセージ:「ユーザー名を入力してください」
            トリガー: 「ぼかし」
          }
        ]、
        口座番号: [
          {
            必須: true、
            バリデーター: validatorAccountNumber、
            トリガー: 「ぼかし」
          }
        ]、
      }
    };
  },
  作成された() {},
  マウント() {},
  メソッド: {
    ハンドルクリック(タブ) {
      
    },
    // キャンセル cancel() {
      
    },
    // 保存 onSubmit(formName) {
      this.$refs[formName].validate(valid => {
        (有効)の場合{
          console.log("送信成功!!");
        } それ以外 {
          console.log("送信エラー!!");
          false を返します。
        }
      });
    }
  }
};
</スクリプト>
 
<スタイル lang="scss">
</スタイル>

2. 検証

/* 銀行口座 */
エクスポート関数validateAccountNumber(str) {
  定数reg = /^([1-9]{1})(\d{14}|\d{18})$/
  reg.test(str) を返す
}

レンダリング

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueフォーム検証プラグインの制作プロセス
  • Vueフォーム検証プラグインであるVue Validatorの使い方の詳細な説明
  • Vueはルールを使用してフォームフィールドを検証します
  • Vue カスタムフォームコンテンツチェックルールの例
  • Vue がルールを使用してフォームフィールドを検証する方法の詳細な説明
  • Vue フォーム検証のやり方を本当に知っていますか? vue フォーム検証 (フォーム) 検証
  • Vue ElementUI のフォーム検証で発生した問題
  • Vue+elementUI はフォームと画像のアップロードおよび検証機能の例を実装します
  • Vue で Element コンポーネントを使用する場合の v-for ループでのフォーム項目検証方法
  • Vue elementui フォーム検証の実装

<<:  IDEA を使用して Tomcat を設定し、JSP ファイルを作成する方法

>>:  Linux のハードリンクとソフトリンクの原理と使用法の分析

推薦する

ウェブ開発者やデザイナーにとって欠かせないオンラインウェブツールとアプリケーション

これまでの記事で、フロントエンド開発者にとって必須のツール、スクリプト、リソースのコレクションを紹介...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

jQuery は、画像を切り替えるための左ボタンと右ボタンのクリックを実装します。

この記事では、左ボタンと右ボタンをクリックすることで画像を切り替えるjQueryの具体的なコードを例...

vue-admin-template 動的ルーティング実装例

ログインを提供し、ユーザー情報データインターフェースを取得するapi/user.js内 '@...

Jsonフォーマットの詳細な説明

目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....

横スクロールウェブサイトデザインの概要

水平スクロールはあらゆる状況に適しているわけではありませんが、適切に行えば、Web サイトを他のサイ...

MySQL Limitパフォーマンス最適化とページングデータパフォーマンス最適化の詳細な説明

MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されま...

Dockerは指定されたメモリで操作を実行します

次のように: -m, --memory メモリ制限。形式は数値と単位です。単位は b、k、m、g の...

MySQL トランザクションの詳細

目次導入取引の4つの特徴トランザクション分離レベル確認するMVCC現在の読書スナップショット読み取り...

IDEA が Docker を統合してリモート展開を実現するための詳細な手順

1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...

Win10環境にMysql5.7.23をインストールする際の問題点と落とし穴

たくさんのチュートリアルを読みましたが、うまくインストールできませんでした。しばらく試行錯誤した後、...

Centos6.5 で MySQL 5.7.19 をインストールして設定する方法

Centos6.5にmysql5.7.19をインストールするための詳細な手順は次のとおりです。 1....

MySQL が innobackupex を使用して接続サーバーをバックアップできない場合の解決策

innobackupex を使用してバックアップする際に MySQL がサーバーに接続できない場合は...

Dockerはrabbitmqのサンプルコードをインストールして実行します

イメージをプルします: [mall@VM_0_7_centos ~]$ sudo docker pu...

MySQLシリーズ15 MySQL共通設定とパフォーマンスストレステスト

1. 一般的なMySQLの設定以下のすべての構成パラメータは、32G のメモリを搭載したサーバーに基...