v-model を使用してページング情報オブジェクトをバインドします。ページング情報オブジェクトには、3 つのコア属性パラメータが含まれています。ページング イベントは、データを照会するメソッドに直接バインドされ、親コンポーネントの handleSizeChange および handleCurrentChange のバインド イベント メソッドが不要になります。 1. はじめにel-pagination コンポーネントをカプセル化してカスタム ページング コンポーネントを開発することに関する同様の記事はインターネット上にすでにたくさんありますが、それらを読んだ後、私はいつも不満を感じていたので、自分で作成することにしました。 2. 背景2.1. 従来のページング処理方法el-pagination コンポーネントを使用する一般的な方法は次のとおりです。 テンプレート部分: <el-pagination @size-change="handleSizeChange" @current-change="現在の変更処理" :current-page="ページ情報のページ番号" :page-sizes="[5, 10, 15, 20]" :page-size="pageInfo.pagesize" layout="total, sizes, prev, pager, next, jumper" :total="pageInfo.total" 背景> </el-pagination> スクリプト部分: エクスポートデフォルト{ データ() { 戻る { フォームデータ: { //クエリ情報 queryInfo:{ ユーザータイプ: 0, deleteFlag: 2, // すべてのタイプを示します pagenum: 1, ページサイズ: 10 }, // ユーザータイプ選択ボックスは現在、表示されているラベル値 userTypeLabel: "すべてのタイプ" を選択しています。 // ユーザー ステータス選択ボックスには現在、選択されたラベル値 userStatusLabel: "すべてのタイプ" が表示されています }, // ページング情報 pageInfo:{ ページ番号: 1, ページサイズ: 10, 合計: 0 } } }, メソッド: { // ユーザー情報リストを照会する queryUsers(){ _this = this とします。 //console.log(このページ情報); this.formData.queryInfo.pagenum = this.pageInfo.pagenum; this.formData.queryInfo.pagesize = this.pageInfo.pagesize; this.instance.queryUsers( this.$baseUrl、this.formData.queryInfo ).then(res => { // コンソールログ(res.data); res.data.code == this.global.SucessRequstCode の場合{ //クエリが成功した場合_this.pageInfo.total = res.data.data.length; _this.userInfoList = res.data.data; }それ以外{ アラート(res.data.message); } }).catch(エラー => { alert('クエリに失敗しました!'); コンソール.log(エラー); }); }, // ページあたりのアイテム数を変更する handleSizeChange(newSize) { this.pageInfo.pagesize = 新しいサイズ; this.queryUsers(); }, // 現在のページ番号が変更されます handleCurrentChange(newPage) { this.pageInfo.pagenum = 新しいページ; this.queryUsers(); } } 2.2 問題分析各ページング クエリには、ある程度単純で反復的な一連の類似メソッドが必要ですが、若干異なる点もあります。つまり、データをクエリする方法が異なります。 強迫性障害を持つプログラマーにとって、単純で反復的なコードは間違いなく非常に不快です。したがって、コンポーネント化する必要があります。 el-pagination ページング コンポーネントの分析:
カスタム ページング コンポーネントの開発目標は、親コンポーネントの handleSizeChange および handleCurrentChange のバインディング イベント メソッドを排除することです。 アイデア: v-model を使用してページング情報オブジェクトをバインドします。ページング情報オブジェクトには、前述の pageInfo など 3 つのコア属性パラメータが含まれます。次に、ページング イベントは、データをクエリするメソッドに直接バインドされます。 3. 計画の実施3.1. カスタムページングコンポーネントカスタム ページネーション コンポーネント コードを記述します。ファイルは /src/Pagination.vue です。コードは次のとおりです。 <テンプレート lang="html"> <div class="ページネーション"> <el-ページネーション @size-change="ハンドルサイズ変更" @current-change="現在の変更を処理する" :current-page.sync="ページ情報.ページ番号" :page-size="ページ情報.ページサイズ" :page-sizes="ページサイズ" :total="ページ情報の合計" layout="total, sizes, prev, pager, next, jumper" 背景 > </el-pagination> </div> </テンプレート> <スクリプト> エクスポートデフォルト{ 名前: "ページネーション", モデル : { プロパティ: 'pageInfo', イベント: '変更' }, 小道具: { //ページあたりの項目数を選択する pageSizes: { タイプ: 配列、 デフォルト() { [5, 10, 15, 20]を返します。 } }, // データオブジェクト pageInfo は v-model にバインドされます: { タイプ: オブジェクト、 必須:true } }, データ(){ 戻る { } }, メソッド: { ハンドルサイズ変更(新しいサイズ) { var 新しい値 = { ページサイズ: 新しいサイズ、 ページ番号: newSize <= this.total ? 1: this.pageInfo['pagenum'] }; this.$emit('change',Object.assign(this.pageInfo,newValue)); this.$emit('ページネーション'); }, 現在の変更を処理する(新しいページ) { this.$emit('change',Object.assign(this.pageInfo,{pagenum:newPage})); this.$emit('ページネーション'); } } } </スクリプト> <style lang="css" スコープ> .ページネーション{ パディング: 10px 0; テキスト配置: 中央; } </スタイル> v-model を使用して双方向のデータ通信を実現する、pagination というカスタム ページング コンポーネント。ページ番号またはページあたりの項目数が変わると、ページネーション イベント @pagination がトリガーされ、親コンポーネント メソッドとのバインディングが提供されます。 pageInfo のフィールド構造は次のように規定されています。 ページ情報:{ pagenum : 1, //数値 ページサイズ: 10, //数値 合計: 0 //数値 } 親コンポーネントは、コンポーネント内の pageInfo オブジェクトをバインドするために、同じ構造のデータ オブジェクトを提供する必要があります。 3.2. ページングコンポーネントを登録する次に、このページング コンポーネントを登録し、main.js に次のコードを追加します。 '@/components/Pagination.vue' からページネーションをインポートします。 //ページングプラグインを登録する Vue.component('pagination', pagination) 3.3. 親コンポーネント呼び出しメソッドページネーション コンポーネントを使用して、前の第 2 章のコードを変更します。 テンプレート部分: <!-- ページング領域 --> <pagination v-model="pageInfo" @pagination="queryUsers"></pagination> スクリプト部分: エクスポートデフォルト{ データ() { 戻る { フォームデータ: { //クエリ情報 queryInfo:{ ユーザータイプ: 0, deleteFlag: 2, // すべてのタイプを示します pagenum: 1, ページサイズ: 10 }, // ユーザータイプ選択ボックスは現在、表示されているラベル値 userTypeLabel: "すべてのタイプ" を選択しています。 // ユーザー ステータス選択ボックスには現在、選択されたラベル値 userStatusLabel: "すべてのタイプ" が表示されています }, // ページング情報 pageInfo:{ ページ番号: 1, ページサイズ: 10, 合計: 0 } } }, メソッド: { // ユーザー情報リストを照会する queryUsers(){ _this = this とします。 //console.log(このページ情報); this.formData.queryInfo.pagenum = this.pageInfo.pagenum; this.formData.queryInfo.pagesize = this.pageInfo.pagesize; this.instance.queryUsers( this.$baseUrl、this.formData.queryInfo ).then(res => { // コンソールログ(res.data); res.data.code == this.global.SucessRequstCode の場合{ //クエリが成功した場合_this.pageInfo.total = res.data.data.length; _this.userInfoList = res.data.data; }それ以外{ アラート(res.data.message); } }).catch(エラー => { alert('クエリに失敗しました!'); コンソール.log(エラー); }); } } このようにして、handleSizeChange および handleCurrentChange イベント応答メソッドが削除されます。ページング情報が変更されると、バインドされた queryUsers メソッドがトリガーされます。 さらに、pageSizes を調整する必要がある場合は、テンプレートで次のように設定します。 :ページサイズ=[10,20,30,50,100] 4. 参考文献このコンポーネントの開発は主に以下の記事を参考にしています。 Vue+el-pagination セカンダリ カプセル化、https://blog.csdn.net/weixin_47259997/article/details/107887823。 vue プロジェクトは、elementui の el-pagination を使用して、共通のページング コンポーネント (https://www.jianshu.com/p/e241e5710fb0/) をカプセル化します。 これで、v-model を使用して el-pagination コンポーネントをカプセル化する Vue のプロセス全体に関するこの記事は終了です。v-model カプセル化 el-pagination コンポーネントに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Linux でファイルプレフィックスを一括で追加する方法
>>: 例を通してMySQLパーティションテーブルの原理と一般的な操作を学びます
Vue コンポーネントをカプセル化する場合でも、機能コンポーネントをクロスファンクショナルに使用しま...
# 以下の例は x64 ビット ランタイム v3.0.0 用です mkdir /runtimes ...
目次質問伸ばす問題を解決する要約する質問プロジェクトの要件に従って、以下の州地図で個々の都市を(異な...
1.17.9 本当はもっと美味しいNginx のダウンロード アドレス: https://nginx...
この記事では、DingTalkの勤怠カレンダーを実装するためのVueの具体的なコードを参考までに共有...
この記事の例では、Vueモバイル端末で指のスライド効果を実現するための具体的なコードを紹介します。具...
1. MIME: 多目的インターネットメール拡張インペリアル カレッジ オブ コンピュータ オンラ...
目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...
.NET の世界に参入したい開発者であれば、何が可能なのかを知る必要があります。 .NET Fram...
目次1. MySQLトリガーの作成: 1. MySQLトリガー作成構文: 2. MySQL作成構文の...
目次Tomcat ダウンロードチュートリアルTomcat インストールチュートリアルTomcat の...
目次並べ替えクエリの最適化変更されたばかりのデータ行を繰り返し取得しないようにする遅延ロードされた結...
タイトルXML/HTML コードコンテンツをクリップボードにコピー< h1 >第 1 レ...
書き方1: sas_order_supply_month_pay セットを更新 RECEIVE_TI...
システムの起動時に読み込む必要がある設定ファイル/etc/profile、/root/.bash_p...