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 のハードリンクとソフトリンクの原理と使用法の分析

推薦する

Linux カーネル デバイス ドライバー proc ファイル システム ノート

/***************** * proc ファイルシステム***************...

固定サイドバーを実現するためのJavaScript

固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...

Linux サーバー上のローカル静的リソースにアクセスするために nginx を使用する方法

1. ポート 80 が占有されているかどうかを確認します。通常、ポート 80 は Apache サー...

Vueでクラススタイルを使用する方法の詳細

目次1. ブール2. 表現3. マルチクラスパッケージ4. v-bind でクラス class を直...

MySQLのストレージエンジンについてお話しましょう

基礎リレーショナル データベースでは、各データ テーブルはファイルに相当し、異なるストレージ エンジ...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

画像の下部の空白部分の問題を解決する

最近のプロジェクトに取り組んでいるとき、下の図に示すように、画像を参照すると常に下部に空白スペースが...

Vue で動的なスタイルを実現するためのさまざまな方法のまとめ

目次1. 三項演算子の判定2. 動的に設定されるクラス3. 方法判定4. 配列バインディング5. e...

PDO を使用して SQL インジェクションを防ぐ原理の分析

序文この記事では、SQL インジェクションを回避するために pdo の前処理メソッドを使用します。詳...

vue+element カスタムクエリコンポーネント

この記事では主に Vue プロジェクトを紹介します。要素の導入を前提として、コンポーネントを 2 回...

MySQL 起動失敗の問題とシナリオ分析

1. ワンストップソリューション1. 問題の分析と特定 # MySQL設定ファイルを見つけて、MyS...

Mybatis ファジークエリ実装方法

Mybatis ファジークエリ実装方法mybatis のリバース アシスタントは非常に使いやすく、通...

GDBデバッグMySQL実戦ソースコードコンパイルとインストール

ソースコードをダウンロード git クローン https://github.com/mysql/my...

Linuxでmysqlの定期的なコールドバックアップを実装するためにmysqldump+expect+crontabを使用するアイデアの詳細な説明

目次1. 遭遇した問題2. アイデア3. コード1. 遭遇した問題私たちは皆、mysqldump を...

Vue でよく使われる高階関数と包括的な例

1. 配列のよく使われる高階関数配列があり、その配列に対して次の操作を実行したいとします。 100 ...