Vue Element UIの使用時に遭遇した問題をまとめる

Vue Element UIの使用時に遭遇した問題をまとめる

vue2.0 に基づく element-ui フレームワークは非常に使いやすく、迅速な開発に非常に適しています。ただし、独自のプロジェクトを実行すると、さまざまな問題に遭遇することになります。一部の問題に関する公式ドキュメントはあまり詳細ではありません。以下は、element-ui の使用時に遭遇した一般的な問題または問題に関するメモです。

1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です

<テンプレート>
    <div>
        <el-日付ピッカー
            サイズ="小"
            クリア可能
            :picker-options="ピッカーオプション"
            v-model="日付範囲"
            タイプ="日付範囲"
            値の形式="yyyy-MM-dd"
            範囲区切り文字="to"
            start-placeholder="開始日"
            end-placeholder="終了日"></el-date-picker>
    </div>
</テンプレート>

<スクリプト>
    エクスポートデフォルト{
        データ () {
            戻る {
                ピッカーオプション: {
                    無効日付 (時刻) {
                        time.getTime() > Date.now() を返す
                    }
                },
                日付範囲: []
            }
        }
    }
</スクリプト>

現在時刻以降の時間(時間、分、秒を含む)のみを選択できる場合もあります。選択した時間が現在時刻より小さい場合は、現在の時間、分、秒が自動的に入力されます。このとき、watch を使用してプロパティやイベントを監視し、処理することができます。

<テンプレート>
    <div>
        <el-date-picker size="small" clearable type="daterange" v-model="dateRange"
            :picker-options="ピッカーオプション"
            値の形式="yyyy-MM-dd"
            範囲区切り文字="to"
            start-placeholder="開始日"
            end-placeholder="終了日"></el-date-picker>
    </div>
</テンプレート>

<スクリプト>
    エクスポートデフォルト{
        データ () {
            戻る {
                ピッカーオプション: {
                    無効日付 (時刻) {
                        time.getTime() を返す < Date.now() - 1 * 24 * 3600 * 1000
                    }
                },
                日付範囲: []
            }
        },
        時計:
            dateRange (val) { //これは変更イベントに置き換えることもできます var st = new Date(val) * 1000 / 1000
                st < Date.now() の場合 {
                    this.dateRange = 新しい日付()
                }
            }
        }
    }
</スクリプト>

2. DateTimePickerの日付選択範囲配列の分割

プロジェクトで発生した要件: daterange 型の日付ピッカーにバインドされた値の日付は配列ですが、バックエンドが受け取る開始日と終了日のパラメータは別々であり、エコー中に返されるデータも別々です。

arrayUtil.js ファイルを作成する

// 配列Util.js
/**
 * @description 配列に対応するインデックスデータを安全に取得します* @param { Array } arr
 * @param { int } インデックス
 */
エクスポートconst saveGet = (arr, index) => {
    Array.isArray(arr) の場合
        arr[インデックス]を返します。
    } それ以外 {
        未定義を返します。
    }
}

.vue ファイルをインポートして呼び出す

// .vue ファイルをインポート { saveGet } './utils/arrayUtil' から;

<el-日付ピッカー 
    タイプ="日付範囲" 
    v-model="日付" 
    値の形式="yyyy-mm-dd" 
    フォーマット="yyyy-mm-dd" 
    start-placeholder="開始日" 
    end-placeholder="終了日" 
    style="width: 100%;"></el-date-picker>

エクスポートデフォルト{
    データ() {
        戻る {
            date: [] // 日付範囲}
    },
    // バックエンドに渡されるパラメータを計算する(日付範囲配列を分割)
    計算: {
        クエリパラメータ() {
            戻る {
                ……
                fromDate: saveGet(this.form.date, 0)、
                toDate: saveGet(this.form,date, 1),
                ……
            };
        }
    },
}

エコーするときは、バックエンドから返された fromDate と toDate を配列に組み合わせるだけです。

3. el-selectセレクターオプションの値/ラベルがスプライスされる

<el-select placeholder="選択してください" style="width:100%" filterable v-model="info" clearable >
    <el-オプション
      v-for="infoList 内の項目"
      :key="info.id"
      :label="`名前: ${item.name} - idNo: ${item.idNo}`"
      :value="アイテムID">
      <span style="float: left">{{ item.tableName }}</span>
      {{ アイテム.レベル }}
    </el-option>
</el-select>

上記の v-model="info" はバックエンドから返された選択されたユーザー ID、infoList はすべてのユーザーの情報、label はユーザー名 - ユーザー ID 番号の連結です。エコーするときは、一致させてフィルタリングし、連結して表示するだけです。

表示は次のようになります。

4. el-dialog親子コンポーネントが値を転送し、el-dialogを閉じるときにエラーが発生する

el-dialogを2回目にカプセル化すると、ダイアログを閉じるときに次のエラーが発生します。

具体的なコードは次のとおりです。

// 親コンポーネント <el-button type="primary" size="mini" @click="dialogVisible=true">追加</el-button>
<com-dialog :dialogVisible.sync="dialogVisible" @closeDialog="closeDialog"></com-dialog>

// サブコンポーネント <テンプレート>
    <el-dialog title="新規" :visible.sync="dialogVisible" @close="ダイアログを閉じる">
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  小道具: {
      ダイアログ表示: {
          タイプ: ブール値、
          デフォルト: false
      }
  },
  方法:{
      //ダイアログを閉じる
      ダイアログを閉じる(){
        this.$emit('update:closeDialog', false);
      }
  },
};
</スクリプト>

エラーの原因は、子コンポーネントの終了イベントが親コンポーネントの終了イベントと競合することです。子コンポーネントの props プロパティは親コンポーネントによって制御される必要があり、visible の値を直接変更することはできません。ここでの sync 修飾子は、el-dialog が親コンポーネントの値を直接変更することと同じです。したがって、親コンポーネントと子コンポーネントの .sync を削除するだけです。

もう 1 つの方法は、close メソッドを before-close に変更することです。具体的なコードは次のとおりです。

// 親コンポーネント <el-button type="primary" size="mini" @click="dialogVisible=true">追加</el-button>
<com-dialog :dialogVisible.sync="dialogVisible" @closeDialog="closeDialog"></com-dialog>

// サブコンポーネント <テンプレート>
    <el-dialog title="新規" :visible.sync="dialogVisible" :before-close="ダイアログを閉じる">
</テンプレート>

<スクリプト>
エクスポートデフォルト{
  小道具: {
      ダイアログ表示: {
          タイプ: ブール値、
          デフォルト: false
      }
  },
  方法:{
      //ダイアログを閉じる
      ダイアログを閉じる(){
        this.$emit('closeDialog', false);
      }
  },
};
</スクリプト>

5. el-form-item ラベルのカスタマイズ

フォームのラベルにプロンプ​​ト テキストを追加する必要があります。具体的な表示要件は次のとおりです。

API ドキュメントでは、フォーム項目スロットにラベル属性があり、ラベル テキストの内容をカスタマイズするために使用されます。実装は次のとおりです。

<el-form-item プロパティ="名前">
    <span スロット="ラベル">
        ユーザー名<i>(アルファベット、数字、特殊文字がサポートされています)</i>
    </span>
    <el-input v-model="名前"></el-input>
</el-form-item>

次に、スタイルに応じてフォントと色を変更します。

6. el-inputはclearableを使用してコンテンツをクリアし、検証プロンプトをトリガーします。

フォームの el-input には入力検証があり、トリガー モードは blur です。clearable を使用してコンテンツをクリアすると、検証プロンプトはトリガーされません。ドキュメントには、コンテンツをクリアするときに呼び出される el-input の focus() メソッドが用意されています。フォーカスが失われると、検証がトリガーされます。具体的な実装は以下のとおりです。

<el-input placeholder="入力してください" v-model="form.name" clearable ref="nameRef" @clear="clearInput('nameRef')"></el-input>
                             
// フォームの内容をクリアするイベント clearInput (refName) {
    this.$refs[refName].focus()
}

上記は、Vue Element UI の使用時に遭遇した問題の詳細な要約です。Vue Element UI の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • vue elementUI が el-select を使用するときに変更イベントがトリガーされる問題を解決する
  • Vueはantデザインのテーブルを使用して、行をクリックしたときにイベント操作をトリガーします。
  • vue2 で elementUi パッケージング エラーを使用する問題を解決する
  • Vue は、antDesign フレームワークまたは elementUI フレームワーク コンポーネントのネイティブ イベントで 2 回トリガーされます。

<<:  MySQLデータベースホスト127.0.0.1とlocalhostの違い

>>:  Nginx はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

推薦する

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

JavaScript実行メカニズムの詳細な紹介

目次1. プロセスとスレッドの概念2. ブラウザの原則3. 同期と非同期4. 実行スタックとタスクキ...

JQueryはアニメーション効果の非表示と表示を実装します

この記事では、アニメーション効果の非表示と表示を実現するためのJQueryの具体的なコードを参考まで...

MySQL の where と on の違いと、いつ使用するか

以前、テーブル結合クエリを書いていたとき、whereとonの違いがわからず、SQLに小さな問題が発生...

CSS フォーム検証機能の実装コード

レンダリング原理フォーム要素には、正規表現(携帯電話番号、メールアドレス、IDカードなど)をカスタマ...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

Bootstrapはカルーセルの効果を実現します

この記事では、カルーセルマップの効果を実現するためのBootstrapの具体的なコードを参考までに共...

Vue.js と MJML でレスポンシブなメールを作成する

MJML は、開発者が美しく、応答性に優れ、あらゆるデバイスやメール クライアントで動作する魅力的な...

Vue 2.0 の基礎を詳しく解説

目次1. 特徴2. 例3. オプション4. 基本的な文法5. ライフサイクル6. ルーティング管理 ...

JavaScriptのアンチシェイクとスロットリングとは

目次1. 関数デバウンス1. 画像安定化とは何ですか? 2. 関数のスロットリング2.1 タイマーの...

MySQL 5.7 でパスワードを変更するときに発生する ERROR 1054 (42S22) の解決方法

MySQL 5.7 を新しくインストールしました。ログインすると、パスワードが間違っているというメッ...

Linux nohup コマンドの原理と例の分析

nohup コマンドUnix/Linux を使用する場合、通常はプログラムをバックグラウンドで実行す...

Docker クリーニングキラー/Docker オーバーレイ ファイルがディスク領域を大量に占有する

[インターネット上の移行ファイルをすべて見ると、信頼性が低く、症状のみを治療し、根本的な原因を治療し...

Linux で Sudo を使用して権限を委譲する

sudo 権限委譲の概要su スイッチ ID: su –l ユーザー名 –c 'コマンド&#...

MySQL 8.0 の新しいリレーショナル データベース機能の詳細な説明

序文MySQL 8.0 の最新バージョンは 8.0.4 rc であり、正式版は近日中にリリースされる...