フォーム項目を動的に追加する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 8.0 for Windows v8.0.11 公式無料バージョン 64 ビット1. デ...
目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...
.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...
目次1. 概要2. 名前フィールド3. バージョンフィールド4. 説明フィールド5. キーワードフィ...
目次1. 基本1.参照2. 参照3. 参照4. 最適な使い方2. 詳細な1. なぜrefが必要なのか...
Visual Studio Code の最新の Insider バージョンには、コードのリモート デ...
まずはコードと効果を見てみましょう↓ <スタイル> 。主要 { アウトライン: 1px ...
目次1. ダウンロードする前に理解しておくべき概念2. 必要なバージョンを選択する3. MySQLサ...
Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript...
目次プレゼンテーション層ビジネスレイヤーコアプラグイン xlsx ExcelインポートExcelエク...
目次序文始めるステップトラブルシューティング序文CPU 使用率が高くなるのは、オンラインでよくある問...
mysql5.7.21の簡単なインストール構成は次のとおりです。 1. MySQLのインストール1....
ドメイン名を使ってプロジェクトにアクセスする方法が気になったのですが、自分でドメイン名を取得するのは...
VScode リモートデバッグ Linux プログラムの問題について見てみましょう。具体的な内容は以...
以前、追加と変更を一緒に記述したテストプログラムを書いたことがあります。変更が必要な場合は、フォーム...