フォーム項目を動的に追加する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 キャンバス テキスト クロック
MySQL で group by を使用すると常にエラー 1055 が発生するため、原因を確認する...
1. 丸い境界線: CSSコードコンテンツをクリップボードにコピー境界線の半径: 4px ; 2....
この記事では、Linux 環境の Apache サーバーでセカンダリ ドメイン名を構成する方法につい...
目次約束とは何ですか?拒否の使用法キャッチの使い方すべての使用法レースの使用約束とは何ですか? Pr...
この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...
HTML では、色は 2 つの方法で表現されます。 1 つは、青の場合は blue のように色の名前...
1. データのバックアップ1. mysqldumpコマンドを使用してバックアップするmysqldum...
目次使用されるPygame関数スクリーンの作成ヘビの作成ヘビを動かすゲームオーバーの処理食事を増やす...
オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...
目次1.vモデル2. プロパティとイベントのバインディング3. フォーム要素のバインディング3.1 ...
目次ERR 1067による殺人事件2番目の問題の原因はsql_modeです3. sql_modeを設...
1. はじめに最近、 Webpackの原理を勉強しています。これまでは Webpack の設定方法し...
1. js は hasOwnProperty が不正に占有されることから保護しません。オブジェクトに...
コードをコピーコードは次のとおりです。 <スタイル> .fileInputContain...
Nginx 仮想ドメイン名設定を使用すると、ドメイン名を購入せずに特定のドメイン名を介してローカル ...