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 ul および li タグを使用して画像を表示するサンプル コード

以下のコードをDreamweaverのコードエリアにコピーすると、プレビュー時に以下の画像が表示され...

Xmeter APIインターフェーステストツールの使用状況の分析

XMeter API は、以下のサービスを含む、JMeter に基づくワンストップのオンライン イン...

MySQL の CPU 負荷が高い問題のトラブルシューティング

MySQL による CPU 負荷の上昇今日の午後、MySQL によってサーバーの負荷が高くなる問題を...

MySQL のデータ型とスキーマの最適化の詳細な説明

現在、MySQL の最適化について学習しています。この記事では、データ型とスキーマの最適化について紹...

MySQLで行を列に変換する方法

MySQL の行から列への操作いわゆる行から列への操作は、テーブルの行情報を列情報に変換することです...

MySQL を解凍してインストールおよび完全に削除する方法の詳細なグラフィック説明

1. MySQLをインストールする(1)ダウンロードしたMySQLの圧縮ファイルをMySQLをインス...

RedHat 6.5 に MySQL 5.7 をインストールするための詳細なチュートリアル

RedHat6.5インストールMySQL5.7チュートリアル共有、参考までに、具体的な内容は次のとお...

MySQL 5.7.16 ZIP パッケージのインストールと設定のチュートリアル

この記事では、MySQL 5.7.16 ZIPパッケージのインストールと設定のチュートリアルを参考ま...

Linux での syslogd および syslog.conf ファイルの解釈

1: syslog.conf の概要異なるタイプの Unix の場合、標準の UnixLog システ...

Vueはシンプルな画像切り替え効果を実装します

この記事では、Vueの具体的なコード例を参考までに紹介します。具体的な内容は以下のとおりです。 コー...

vue3とvue2の利点の比較

目次利点1: diffアルゴリズムの最適化利点2: ホイスト静的静的リフティング利点3: cache...

Tomcat サーバー入門の超詳細なチュートリアル

目次1. Tomcat の概念–1、サーバー–2、ウェブサーバー–3、Tomcatサーバー次にTom...

Ubuntu で .sh ファイルを実行するいくつかの方法の違いについて簡単に説明します。

序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...

Alibaba CloudにMySQLをインストールする方法の詳細な説明

軽量のオープンソース データベースである MySQL は、エンタープライズ レベルのアプリケーション...

{{ }} で関数を直接使用する WeChat アプレットの例

序文WeChat アプレット開発 (ネイティブ wxml、wxcss) で、{{ }} 内で直接メソ...