シナリオ最近、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の詳細なチュートリアル
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
問題の説明データ転送に Nginx を使用し、フロントエンドとバックエンドが分離された Spring...
目次1. 組み込みオブジェクト2. 数学オブジェクト1. Mathオブジェクトの使用2. 指定された...
目次1. Tencent Cloud Serverに接続する2. 環境整備Jenkinsのデプロイメ...
3 つのテーブルが接続されています。テーブル A のフィールド a はテーブル B のフィールド b...
序文Nginx はパフォーマンスを重視して設計された HTTP サーバーです。Apache や li...
HTML イベント リスト一般イベント: onClick HTML: マウスクリックイベント。主にオ...
この記事では、MySQL 5.7.25圧縮版のインストールと設定方法を参考までに紹介します。具体的な...
1. 現在のすべての接続の詳細情報を表示します。 ./mysqladmin -uadmin -p -...
目次1. isPrototypeOf()例 1、オブジェクト クラス インスタンス:例 2: Hum...
0. タグとは何ですか? XML/HTML コードコンテンツをクリップボードにコピー<入力 t...
ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...
1. 切断理由WebSocket が切断される理由は多数あります。WebSocket が切断されたと...
UCenter Homeは、ComsenzがリリースしたSNSサイト構築システムです。最新バージョン...
目次データ量匿名マウントと名前付きマウントデータボリュームの場所データ量匿名マウントと名前付きマウン...