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 はリクエスト接続を統合し、ウェブサイトのアクセス例を高速化します

推薦する

MySQL 5.7.17 無料インストールバージョンの設定方法グラフィックチュートリアル (Windows10)

1. 概要ネットでいろいろ検索してみたところ、Linux システム向けではなく、現在の新しいバージ...

JavaScript の継承についてどれくらい知っていますか?

目次序文コンストラクタ、プロトタイプオブジェクト、インスタンスオブジェクトの関係プロトタイプチェーン...

CentOS 上の Docker に Jupyter をインストールしてポートを開く方法

目次jupyterをインストールするDocker ポートマッピングjupyterをインストールするp...

要素に丸い境界線を追加する border-radius メソッド

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

MySQL データベースのパフォーマンス最適化の概要

目次なぜ最適化するのですか? ?どこから始めますか? ?解決策は何ですか? ? ?どうやって選ぶ? ...

CentOS8でyumソースを変更した後にウェアハウスキャッシュの同期に失敗する問題の詳細な説明

問題の原因: 最初は CentOS 8 のデフォルトの yum ソースを正常に使用できますが、次のコ...

JavaScript 関数のパフォーマンスを測定するさまざまな方法の比較

目次概要パフォーマンス.nowコンソール.time時間精度を短縮注意事項分割して征服する入力値に注意...

Ubuntu 18.04 Linux システムに JDK と Mysql をインストールする方法

プラットフォームの展開1. JDKをインストールするステップ1. OracleJDKをダウンロードす...

MySQL カーソル関数と使用法

目次意味カーソルの役割カーソルの使用カーソルの宣言カーソルを開くカーソルデータのトラバースカーソルを...

MySQL パフォーマンスの包括的な最適化方法リファレンス、CPU、ファイルシステムの選択から mysql.cnf パラメータの最適化まで

この記事では、一般的な MySQL 最適化方法をいくつかまとめて簡単に紹介します。これは、フルタイム...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

Vueはメニューナビゲーションを実装するためにelement-uiを使用します

この記事では、Element-uiを使用してメニューナビゲーションを実装するVueの具体的なコードを...

CSS が複数のクラスに一致する方法のサンプルコード

CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...

テキストエリアのテキスト入力領域に改行を実装する方法

textarea 入力領域でテキストを折り返す場合は、<br/> と入力すると <...