iviewは動的なフォームとカスタム検証期間の重複を実装します

iviewは動的なフォームとカスタム検証期間の重複を実装します

フォーム項目を動的に追加する

iview の動的なフォーム追加は非常に簡単です。フォーム項目を配列に設定し、新しい項目を追加するときにデフォルト値をプッシュするだけです。残りの作業は iview が行います。

<テンプレート lang="html">
 <divクラス="">

    <フォーム
      ref="フォーム検証"
      :model="フォーム検証"
      :rules="ルールを検証"
      :ラベル幅="100"
      :label-colon="true"
    >
   <フォーム項目
    v-for="(item, index) in formValidate.showTimeDurations"
    :key="インデックス"
    :prop="'showTimeDurations[' + インデックス + '].値'"
    :label="'期間を表示' + (インデックス + 1)"
   >
    <行>
     <タイムピッカー
      タイプ="時間範囲"
      v-model="item.value"
      配置="下端"
      placeholder="期間を選択してください"
      スタイル="幅: 400px;"
      :disabled="編集不可"
      </タイムピッカー>
     <ボタン shape="circle" icon="md-close" @click="handleRemove(index)" style="margin-left: 10px;"></Button>
    </行>
   </フォーム項目>
   <FormItem style="width: 500px;" v-if="formValidate.showTimeDurations.length < 3">
    <Button type="dashed" long @click="handleAddDuration" icon="md-add">表示期間を追加</Button>
   </フォーム項目>
   </フォーム>
 </div>
</テンプレート>

<スクリプト>
エクスポートデフォルト{
 名前: 'banner_new',
 データ() {
  戻る {
   フォーム検証: {
    showTimeDurations: [{値: ['','']}]
   }
  }
 },
 メソッド: {
  ハンドル追加期間() {
   this.formValidate.showTimeDurations.push({値: ['','']})
  },
  ハンドル削除(インデックス) {
   this.formValidate.showTimeDurations.splice(インデックス、1)
  }
 }
}
</スクリプト>

<style lang="css" スコープ>
</スタイル> 

フォーム検証

iview のフォーム検証は:rules="rulesValidate"は、メソッドに設定されるメソッドです。

タイトルフォーム項目と送信ボタンを追加する

 <フォーム項目 label="名前" prop="タイトル" style="幅: 500px;">
    <Input v-model="formValidate.title" :disabled="isDisEdit" :placeholder="'スライドショーの名前を入力してください (最大 50 文字)'" maxlength="50" show-word-limit></Input>
  </フォーム項目>
  ...
  <行タイプ="flex" justify="start" style="margin-top: 20px;">
    <Button type="primary" style="width: 100px; margin-left: 20px;" v-if="isCanSave" @click="handleSubmit('formValidate')">保存</Button>
  </行>
  メソッド: {
    handleSubmit(フォーム) {
      // 検証メソッドを呼び出すと検証が実行されます this.$refs[form].validate(validate => {
        // 検証が成功したかどうかの検証=true/false})
    },
  }

フォーム検証:

ルール検証: {
  タイトル:
    {
      必須: true、
      メッセージ: 'スライドショーの名前を入力してください'
      トリガー: 'ぼかし'
    },
    {
      タイプ: '文字列',
      最大: 50,
      メッセージ: '50文字以内、中国語/文字/数字/一般文字'、
      トリガー: '変更'
    }
  ]、

次のようにも書ける。

タイトル: [{{ 必須: true、メッセージ: '画像名を入力してください'、トリガー: 'ぼかし'}}]

検証条件は配列になっており、複数の条件を記述することができます。カスタム検証が必要な場合は、データに検証子を定義できます。

データ() {
  constdurationValidator = (ルール、値、コールバック) => {
    if(this.isShowTimePicker && value.toString() === ',') {
      callback(new Error('表示期間を選択してください'));
    }そうでない場合(値[0] === 値[1]) {
      callback(新しいエラー('正しい期間を選択してください'))
    }else if(!showTimeDurationsJudge(this.formValidate.showTimeVOS)){
      callback(新しいエラー('期間を繰り返すことはできません'))
    }それ以外 {
      折り返し電話()
    }
  };
  constdurationValidate = [{ バリデータ:durationValidator, トリガー: 'blur' }];
  戻る {
    ルール検証: {
      'showTimeDurations[0].value': 期間の検証、
      'showTimeDurations[1].value': 期間検証、
      'showTimeDurations[2].value': 期間検証、
    }
  }
}

'showTimeDurations[0].value': durationValidate,この書き方は、フォームの動的項目の最初のサブ項目の値を検証することを意味します。サブ項目が3つある場合は、3回繰り返す必要があります。もっと良い書き方があるのでしょうか?とりあえずこれで終わりです。

showTimeDurationsJudge 、期間が繰り返されるかどうかを確認するメソッドです。

期間が重複していることを確認する

まず、2 つの期間があるかどうかを確認する方法を考えてみましょう。日をまたぐ状況は考慮されません。

考えてみると、2つの期間が重ならないための必要十分条件は

  • 前の期間 (a1) の開始時刻 (start1) と終了時刻 (end1) は、次の期間 (a2) の開始時刻 (start2) より前である必要があります。
  • 次の期間 (a2) の開始時刻 (start2) と終了時刻 (end2) は、前の期間 (a1) の終了時刻 (end1) より後である必要があります。

上記の条件を満たすことで、2 つの期間が完全にずらされることが保証されます。

コントロールによって与えられた時間は「00:00:00」という形式の文字列であるため、文字列をサイズを比較できるタイムスタンプに変換する moment ライブラリを導入しました。

定数ジャッジ = (a1,a2) => {
 結果 = false とする
  定数 start1 = moment(a1[0],"HH:mm:ss").valueOf()
  定数 end1 = moment(a1[1],"HH:mm:ss").valueOf()
  定数 start2 = moment(a2[0],"HH:mm:ss").valueOf()
  定数 end2 = moment(a2[1],"HH:mm:ss").valueOf()

  開始1 == 開始2の場合
    偽を返す
  }それ以外の場合(開始1 > 開始2) {
    結果 = 開始1 > 終了2
  }それ以外 {
    結果 = 終了1 < 開始2
  }
  結果を返す
}

重複がある場合は false を返し、重複がない場合は true を返します。 2 つの期間を比較できるようになった後、さらに期間がある場合は、ループを使用して比較できます。完全なコードは次のとおりです。

'moment' から moment をインポートする

エクスポートconst showTimeDurationsJudge = (期間) => {
 judgeResult = true とします
 期間 && 期間.長さ > 1 の場合 {
  for(let i=0;i<durations.length-1;i++){
   for(j=i+1;j < 期間.長さ;j++) {
       判定結果 = 判定結果 && 判定(期間[i].値、期間[j].値)
     }
  }
 }
 判定結果を返す
}

定数ジャッジ = (a1,a2) => {
 結果 = false とする
  定数 start1 = moment(a1[0],"HH:mm:ss").valueOf()
  定数 end1 = moment(a1[1],"HH:mm:ss").valueOf()
  定数 start2 = moment(a2[0],"HH:mm:ss").valueOf()
  定数 end2 = moment(a2[1],"HH:mm:ss").valueOf()

  開始1 == 開始2の場合
    偽を返す
  }それ以外の場合(開始1 > 開始2) {
    結果 = 開始1 > 終了2
  }それ以外 {
    結果 = 終了1 < 開始2
  }
  結果を返す
}

これで、iview が動的フォームとカスタム検証期間の重複を実装する方法について説明したこの記事は終了です。iview フォーム検証の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • iview フォーム検証に関する簡単な説明
  • iview による複数フォームの同時検証の概要

<<:  JavaScript キャンバス テキスト クロック

>>:  jQueryはアコーディオン効果を実装します

推薦する

MySQL 8.0.11 の新機能の紹介

MySQL 8.0 for Windows v8.0.11 公式無料バージョン 64 ビット1. デ...

Vueはドラッグ可能なツリー構造図を実装します

目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...

JavaScript で localStorage を使用する方法

.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...

最も完全なpackage.json分析

目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...

Vue3 の ref toRef と toRefs の違いを理解する方法

目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...

VScode リモート SSH リモート編集とデバッグコード

Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...

フレックスレイアウトのスペース間の最後の行の左揃えの問題を解決する方法

まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...

WindowsでのMySQLインストールチュートリアルの詳細な紹介

目次1. ダウンロードする前に理解しておくべき概念2. 必要なバージョンを選択する3. MySQLサ...

ethers.js を使用して Solidity スマート コントラクトをデプロイする方法

Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript...

ReactはExcelファイルのインポートとエクスポートを実装します

目次プレゼンテーション層ビジネスレイヤーコアプラグイン xlsx ExcelインポートExcelエク...

Linux で CPU 使用率が高くなる原因をトラブルシューティングするプロセスの詳細な説明

目次序文始めるステップトラブルシューティング序文CPU 使用率が高くなるのは、オンラインでよくある問...

MySQL 5.7.21 のインストールと設定のチュートリアル

mysql5.7.21の簡単なインストール構成は次のとおりです。 1. MySQLのインストール1....

ドメイン名を介してプロジェクトにアクセスするnginx + tomcatの例

ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...

VScode設定のリモートデバッグLinuxプログラムの問題を解決する

VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...

無効にするとフォームの入力が送信できない問題の解決方法

以前、追加と変更を一緒に記述したテストプログラムを書いたことがあります。変更が必要な場合は、フォーム...