Implémentation de la pagination pour les tables avec Element-UI

Composants nécessaires

Pour créer une table paginée avec Element-UI, utilisez les composants el-table et el-pagination. Consultez la documentation officielle d'Element-UI pour plus de détails.

Installation d'Element-UI

Pour intégrer Element-UI dans votre projet Vue.js, exécutez la commande suivante dans votre terminal :

yarn add element-ui

Importation d'Element-UI

Vous pouvez importer Element-UI de manière complète ou sélective. L'importation sélective est recomandée pour optimiser la taille du bundle.

Importation complète

Ajoutez ce code dans votre fichier prnicipal, par exemple main.js :

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import App from './App.vue';

Vue.use(ElementUI);

new Vue({
  el: '#app',
  render: h => h(App)
});

Importation sélective

Pour importer uniquement les composants nécessaires, installez d'abord le plugin Babel :

npm install babel-plugin-component --save-dev

Modifiez ensuite le fichier de configuration Babel (par exemple .babelrc) :

{
  "presets": [["es2015", { "modules": false }]],
  "plugins": [
    [
      "component",
      {
        "libraryName": "element-ui",
        "styleLibraryName": "theme-chalk"
      }
    ]
  ]
}

Exemple d'importation sélective pour les composants Table et Pagination :

import Vue from 'vue';
import { Table, Pagination } from 'element-ui';
import App from './App.vue';

Vue.component(Table.name, Table);
Vue.component(Pagination.name, Pagination);

new Vue({
  el: '#app',
  render: h => h(App)
});

Création de la table côté client

Voici un exemple de code Vue pour afficher une table avec des données de démosntration :

<template>
  <div class="container">
    <el-table :data="listeArticles" stripe style="width: 100%">
      <el-table-column prop="jour" label="Jour" width="150"></el-table-column>
      <el-table-column prop="titre" label="Titre" width="200"></el-table-column>
      <el-table-column prop="contenu" label="Contenu"></el-table-column>
    </el-table>
  </div>
</template>

<script>
export default {
  name: 'TableDemo',
  data() {
    return {
      listeArticles: [
        { jour: '2023-01-10', titre: 'Introduction à Vue', contenu: 'Contenu de base sur Vue.js' },
        { jour: '2023-01-12', titre: 'Avancé avec Vuex', contenu: 'Gestion d\'état avancée' },
        { jour: '2023-01-15', titre: 'Tests unitaires', contenu: 'Méthodologies de test' },
        { jour: '2023-01-18', titre: 'Déploiement', contenu: 'Processus de mise en production' }
      ]
    };
  }
};
</script>

Ajout de la pagination

Intégrez le composant de pagination en dessous de la table pour permettre la navigation entre les pages :

<el-pagination
  @size-change="modifierTaillePage"
  @current-change="modifierPageCourante"
  :current-page="pageActive"
  :page-sizes="[5, 10, 20, 50]"
  :page-size="5"
  layout="total, sizes, prev, pager, next, jumper"
  :total="100"
></el-pagination>

Explication des attributs :

  • :current-page : indique le numéro de la page actuelle.
  • :page-sizes : définit les options pour le nombre d'éléments par page.
  • :page-size : spécifie le nombre d'éléments affichés par page.
  • layout : détermine les éléments affichés dans la barre de pagination (ex. "total" pour le total, "next" pour la page suivante).
  • :total : représente le nombre total d'éléments à paginer.

Ajoutez les méthodes correspondantes dans la section methods du composant :

methods: {
  modifierTaillePage(nouvelleTaille) {
    console.log(`Nombre d'éléments par page : ${nouvelleTaille}`);
    // Logique pour mettre à jour la taille de page
  },
  modifierPageCourante(numeroPage) {
    console.log(`Page courante : ${numeroPage}`);
    // Logique pour charger les données de la page
  }
}

Pour personnaliser l'apparence de la pagination, vous pouvez utiliser des styles CSS globaux ou locaux. Si nécessaire, employez des sélecteurs profonds comme ::v-deep dans les composants Vue pour surcharger les styles d'Element-UI.

Étiquettes: Vue.js element-ui JavaScript HTML CSS

Publié le 20 juin à 17h11