フォーム項目を動的に追加する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 のフォーム検証は タイトルフォーム項目と送信ボタンを追加する <フォーム項目 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': 期間検証、 } } } 期間が重複していることを確認するまず、2 つの期間があるかどうかを確認する方法を考えてみましょう。日をまたぐ状況は考慮されません。 考えてみると、2つの期間が重ならないための必要十分条件は
上記の条件を満たすことで、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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: JavaScript キャンバス テキスト クロック
要件: Celery は Django に導入されています。Django プロジェクトを開始するとき...
今日は、Linux ホスト上で 4 つの MySQL データベースを起動する方法について説明します。...
質問Docker でローカル データベースにアクセスするにはどうすればよいでしょうか? 127.0....
1. インストール前の準備: 1.1 JDKをインストールするopenjdkをアンインストールする...
この記事では、bootstrapテーブルの使い方を参考までに紹介します。具体的な内容は次のとおりです...
目次1. 親コンポーネントと子コンポーネント間の一方向の値転送1. 親から子への値の受け渡し2. 子...
目次1. RabbitMqの動作環境を構築する1.検索を通じてrabbitmqイメージを照会する2....
目次1. 関数の定義1.1 JavaScript の関数1.2 TypeScriptの関数2. オプ...
目次1. MySQLアーキテクチャの分析1.1 コネクタ1.2 クエリキャッシュ1.3 アナライザー...
目次1. サブクエリの定義2. サブクエリの分類1. スカラーサブクエリ: 2. MySQLサブクエ...
例示するシステムを自分でインストールする場合は、通常、システム言語をカスタマイズできます。ただし、ク...
効果プレビュー右側の「クリックしてプレビュー」ボタンを押すと現在のページでプレビューが表示され、リン...
目次Vue モニターのプロパティリスナープロパティとは何ですか?リスニングプロパティと計算プロパティ...
エラーを報告するには次のコマンドを実行しますsystemctl dockerを再起動しますエラーメッ...
Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...