シナリオ最近、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の詳細なチュートリアル
序文従来のWEBレイアウトに沿うため、すべてヘッダーとフッターモードの左・中央・右レイアウトで書かれ...
フロントエンド開発では、スクロールバーを非表示にしながらスクロールをサポートしなければならないという...
SQL文 /* MySQL で重複行を削除するいくつかの方法 ---Chu Minfei ---20...
1. Navicat for MySQL 15をダウンロードするhttps://www.navica...
Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...
目次インストール環境の説明MySQLデータベースサービスをインストールするメインライブラリを構成する...
目次1. CentOS 7.9 20にDockerをインストールする2. MySQL クラスターをデ...
1. 属性へのリンク(1)ルーティングパスを配置する(2)指定された形式でオブジェクトを配置する{パ...
Git は vscode に統合されており、git コマンドをいくつか記述しなくても、クリックするだ...
序文nginx はマルチプロセス モデルを使用します。リクエストが届くと、システムはプロセスをロック...
適切な設定を行うことで、Linux ユーザーにパスワードを定期的に変更させることができます。パスワー...
目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...
目次1. appIDの申請と設定1. appidの取得方法2. AppIDの設定2. 基本的なユーザ...
目次1. バックアップ1.1 万全の準備1.2 追加の準備2 バックアップとリカバリ2.1 データの...
Q: Outlook または IE のどちらを使用している場合でも、マウスを右クリックすると、ポッ...