シナリオ最近、ElementUI をベースにしたバックグラウンド管理システムの開発を始めたのですが、偶然「el-select」ドロップダウン選択に問題があることを発見しました。ドロップダウン オプションをレンダリングする「options」のデータ量が多すぎると (このプロジェクトのデータ エントリの数は 10,000 を超えています)、ドロップダウン セレクターがスタックし、特にファジー マッチング フィルタリングの場合は、スタックがひどくなります。セレクターを初期化すると、クリックしても応答がなくなり、「ダイアログ」ポップアップ ウィンドウが表示されるまでに複数回クリックする必要がある場合があります (このドロップダウン フィルターはポップアップ ウィンドウに実装されています)。 多くのブログのメモを読んだ後、ようやく問題の解決策を見つけました。今後同様の問題に遭遇したときに簡単に参照できるように、この最適化計画をメモとして記録します。 注: 選択したドロップダウン フィルターに基づいて、カスタム イベントを通じてあいまい検索マッチングが実現されます。 次の 2 つのオプションがあります。
コードの実装Vueコンポーネントの例 <テンプレート> <div class="app"> <el-dialog title="タイトル" :visible.sync="relatedOpen" :append-to-body="true" width="500px"> <el-row :gutter="16"> <el-col :span="20"> <el-選択 v-model="値" フィルター可能 クリア可能 スタイル="幅:100%" placeholder="選択してください" :loading="検索読み込み" :filter-method="フィルターメソッド" v-el-select-loadmore="loadMore(範囲番号)" @visible-change="可視変更" > <el-option v-for="item in options.slice(0, rangeNumber)" :key="item.key" :label="item.value" :value="item.key"></el-option> </el-select> </el-col> <el-col :span="4"> <el-button type="primary" @click="submit">OK</el-button> </el-col> </el-row> </el-ダイアログ> </div> </テンプレート>
// カスタムディレクティブ: { "el-select-loadmore": (el, バインディング) => { // 要素 UI によって定義されたスクロール要素を取得します。const SELECTWRAP_ROM = el.querySelector(".el-select-dropdown .el-select-dropdown__wrap"); (SELECTWRAP_ROM)の場合{ // スクロールイベントを追加 SELECTWRAP_ROM.addEventListener("scroll", function() { // スクロールを決定します const condition = this.scrollHeight - this.scrollTop <= this.clientHeight; 条件 && binding.value(); }); } } } 対応するデータ関数 エクスポートデフォルト{ データ() { 戻る { 関連Open: false, options: [] /* ドロップダウンボックスの値を選択する */, コースリスト: [], 範囲番号: 10, searchLoad: false /* ドロップダウンボックスの読み込み状態*/, 価値: ""、 タイマー: null }; }, 作成された() { オプションを取得します。 }, メソッド: { // オンデマンドロード loadMore(n) { 戻り値 () => (this.rangeNumber += 5); }, // コースウェアをフィルタリングする filterMethod(query) { this.timer != null の場合、 this.timer のタイムアウトをクリアします。 !this.searchLoad && (this.searchLoad = true); this.timer = setTimeout(() => { this.options = !!query ? this.courseList.filter(el => el.value.toLowerCase().includes(query.toLowerCase())): this.courseList; タイムアウトをクリアします(this.timer); this.searchLoad = false; this.rangeNumber = 10; this.timer = null; }, 500); }, // 選択ドロップダウンボックスの表示と非表示をリッスンする visibleChange(flag) { // 表示時にリストフラグを初期化します && this.filterMethod(""); // デフォルト値を初期化します this.rangeNumber = 10; }, // オプションを取得する async getOptions() { searchCourseware() を待機します。その後 (res => { リストを res.data とします || []; // デフォルトで表示されるデータ this.options = list; // 元のデータ this.courseList = list; }); } } } 注記:
要約:新しい仕事環境に変わり、バックエンドの管理システムに携わるようになりました。多かれ少なかれ、さまざまな問題に遭遇するでしょう。いつものように、開発中に遭遇した問題をメモに記録します。良い記憶力は悪いペンほど良くありません。今種を植えて、来年の秋に実を結びたいと思っています。 JY Element での最適化された複数選択データ読み込みの実装に関するこの記事はこれで終わりです。より関連性の高い Element 複数選択データ読み込みコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Pycharmとsshリモートアクセスサーバーdockerの詳細なチュートリアル
Linux では、cat、more、less の各コマンドを使用してファイルの内容を表示できます。c...
各テーブルの行数をカウントするために使用される MySQL count() 関数は、誰もがよく知って...
IE10 では、<input> と <input type="passw...
【はじめに】: Handtrack.jsは、ブラウザ上で直接リアルタイムの手の動きの追跡と検出を実...
1) 適用範囲:読み取り専用:input[type="text"],input[...
HTMLタグのリストマークタイプ名前または意味効果述べるファイルのタグ付け<HTML> ...
目次1. レンダリング2. 実施原則3. まとめ1. レンダリング 2. 実施原則幅と高さが等しい拡...
目次1. v-on指令1. 基本的な使い方2. 糖衣構文3. イベントパラメータ4. イベント修飾子...
目次序文コンポーネントの紹介クラスコンポーネントの作成状態についてレンダリングについて関数コンポーネ...
目次1. Cocos Creatorでのオーディオ再生の基本1. 基本2. 一般的な方法2. Coc...
ネイティブ JS で実装したリアルタイム クロック エフェクトを共有します。エフェクトは以下のとおり...
私は今日、mybatis を学び、データベースに対していくつかの簡単な追加、削除、変更、クエリを実行...
相対的な長さの単位それら説明: 相対的な長さの単位。現在のオブジェクト内のテキストのフォント サイズ...
最近、vue について読みました。これまで基本的に見落としていた単一ファイル コンポーネントを見つけ...
この記事では、centos7 環境でソース コードから mysql5.7.16 をインストールする方...