シナリオ最近、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の詳細なチュートリアル
カーネル 2.6 の時代には、アクセス制御セキュリティ ポリシーのメカニズムを提供するために新しいセ...
MYSQLは大文字と小文字を区別します言葉を見れば信じられます。タイトルを見れば内容がわかります。 ...
1.コンテナ内の /etc/hosts、/etc/resolv.conf、/etc/hostname...
Ubuntu をインストールしたばかりですが、開いたときにネットワーク接続がありませんでした。右上隅...
コードをコピーコードは次のとおりです。 .sugLayerDiv{位置:相対; overflow:h...
tomcat を https アクセスに対応させる方法ステップ: (1)キーストアファイルを生成する...
目次1. インスタンスをインストールして作成する2. vue-router4の新機能2.1 動的ルー...
問題の説明最近、ホストから次のカーネル情報が報告されました。 7月8日 10:47:42 cztes...
準備1. 仮想マシンを起動する2. gitツールルートアカウントでログインルートアカウントを使用して...
序文: Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はこれを使...
mysql 行から列へ、列から行へ難しい文章ではないので、詳しく説明はしません。文章を読むときは、一...
この記事では、参考のために、ミニプログラムでカスタムのマルチレベル単一選択および複数選択機能を実装す...
準備する:教師テーブルと生徒テーブルを定義し、生徒テーブルで教師テーブルIDを参照します。テーブルt...
文章1) Ubuntuイメージをダウンロードする docker プル Ubuntu 2) 画像を見る...
目次DOM処理配列方法要約するDOM処理DOM はドキュメントの構造化された表現を提供し、スクリプト...