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

推薦する

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

ウェブページで CSS スタイルを適用するさまざまな形式の概要

1. インライン スタイル (<body></body> 内に配置されます)...

ウェブサイトはグレー表示されています。画像を含む互換コードはすべてのブラウザをサポートしています

通常、国喪の日、大地震の日、清明節には、ウェブサイト全体を灰色にして、故人への哀悼の意を表します。そ...

CSS3の新しい背景プロパティの詳細な説明

これまで、CSS の背景の属性には、color、image、repeat、attachment、po...

js、css、htmlはブラウザのさまざまなバージョンを決定します

正規表現を使用してIEブラウザのバージョンを判別するIEブラウザかどうか確認するif (docume...

MySQLクエリが遅い理由

目次1. 遅いところはどこですか? 2. 不要なデータをクエリしましたか? 1. 不要なレコードをク...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...

MySQL 5.7.25 のインストールと設定方法のグラフィックチュートリアル

MySQL インストール ファイルには、msi 形式と zip 形式の 2 種類があります。クリック...

MySQLループは数千万のデータを挿入する

1. テストテーブルを作成する テーブル `mysql_genarate` を作成します ( `id...

MySQL InnoDB ReplicaSet の簡単な紹介

目次01 InnoDBレプリカセットの紹介02 InnoDBレプリカセットの制限03 導入前に知って...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...

大量のデータを含むエレメントのシャトルボックスで「すべて選択」をクリックするとスタックする問題の解決方法

目次解決策1: EUIの転送コンポーネントをコピーして変更し、プロジェクトディレクトリに導入する解決...

Centos7 で mysqldump を使用して MySQL データベースの毎日の自動バックアップを作成する

1. 要件:データベースのバックアップは、実稼働環境にとって特に重要です。データベースのバックアップ...

WeChatアプレット学習ノート: ページ構成とルーティング

最近、小さなプログラムの開発を勉強して見直しており、学習結果のいくつかをメモしています。公式の We...

純粋な HTML タグにどれくらい精通していますか?

以下の HTML タグには、基本的に既存のタグがすべて含まれています。数分かけて 1 つずつ参照する...