Maison interface Web Voir.js Pratique des composants Vue : développement de composants de pagination

Pratique des composants Vue : développement de composants de pagination

Nov 24, 2023 am 08:56 AM
vue Composants Pagination

Pratique des composants Vue : développement de composants de pagination

Pratique des composants Vue : développement de composants de pagination

Introduction

Dans les applications Web, la fonction de pagination est un composant essentiel. Un bon composant de pagination doit être simple et clair dans sa présentation, riche en fonctions et facile à intégrer et à utiliser.

Dans cet article, nous présenterons comment utiliser le framework Vue.js pour développer un composant de pagination hautement personnalisable. Nous expliquerons en détail comment développer à l'aide des composants Vue à travers des exemples de code.

Pile technologique

  • Vue.js 2.x
  • JavaScript (ES6)
  • HTML5 et CSS3

Environnement de développement

  • Node.js v8.9.3
  • npm v5.5.1
  • V ue.js v2 .5.2

Exigences du composant de pagination

  • Recevoir le nombre total de pages (total) et le nombre actuel de pages (actuel) via les accessoires
  • Vous pouvez configurer le nombre maximum de pages affichées (maxShown)
  • Vous pouvez configurez le texte affiché par le bouton (prevText et nextText) et le style du bouton
  • Cliquez sur le numéro de page pour passer à la page correspondante
  • Le numéro de la page actuelle est mis en surbrillance
  • Lorsque la page actuelle n'a pas de page précédente, le clic l'événement du bouton de la page précédente est ignoré
  • Lorsque la page actuelle n'a pas de page suivante, ignorez l'événement de clic du bouton de la page suivante

Idées de conception et implémentation du code

Selon les besoins, nous divisons le composant de pagination en plusieurs petits composants pour la mise en œuvre. Nous devons créer les 3 petits composants suivants :

  1. Pagination.vue

composant de pagination principal, qui est responsable du traitement des données et de la logique de pagination. Transmettez les informations de pagination aux composants enfants et répondez aux événements des composants enfants.

  1. Button.vue

Ce composant est un composant bouton, utilisé pour créer des boutons de pagination.

  1. Page.vue

Ce composant est utilisé pour créer un bloc de page unique, comprenant l'étiquette et le statut de la page. Un bloc de page peut être la page actuelle ou une page non actuelle.

Ensuite, utilisons du code pour implémenter les 3 composants ci-dessus.

  1. Pagination.vue
<template>
  <div class="pagination-container">
    <button-prev :current="current" @onPrev="prev"></button-prev>
    <page v-for="page in pages"
      :key="page"
      :page="page"
      :is-selected="page === current"
      @on-page-selected="selectPage"></page>
    <button-next :current="current" :total="total" @onNext="next"></button-next>
  </div>
</template>
<script>
import ButtonPrev from './ButtonPrev.vue';
import ButtonNext from './ButtonNext.vue';
import Page from './Page.vue';

export default {
  components: { ButtonPrev, ButtonNext, Page },
  props: {
    total: {
      type: Number,
      default: 10
    },
    current: {
      type: Number,
      default: 1
    },
    maxShown: {
      type: Number,
      default: 5
    },
    prevText: {
      type: String,
      default: '上一页'
    },
    nextText: {
      type: String,
      default: '下一页'
    }
  },
  computed: {
    pages () {
      const start = Math.max(1, this.current - Math.floor(this.maxShown / 2));
      const end = Math.min(this.total, start + this.maxShown - 1);
      return Array.from({ length: end - start + 1 }, (v, k) => start + k);
    }
  },
  methods: {
    selectPage (page) {
      if (this.current === page) return;
      this.current = page;
      this.$emit('onPageChanged', page);
    },
    prev () {
      if (this.current > 1) {
        this.selectPage(this.current - 1);
      }
    },
    next () {
      if (this.current < this.total) {
        this.selectPage(this.current + 1);
      }
    }
  }
}
</script>

Dans le code ci-dessus, nous importons d'abord les composants ButtonPrev, ButtonNext et Page. Ensuite, les attributs total, current, maxShown, prevText et nextText sont obtenus à l'aide d'accessoires, et les pages d'attributs calculées sont définies en fonction du numéro de page actuel (current) et du numéro de page maximum (maxShown), un tableau contenant le numéro de page. est obtenu à utiliser dans le composant Present.

Nous définissons également la méthode selectPage, dans laquelle si le numéro de page (page) est le même que le numéro de page actuel (current), renvoie ou ne fait rien. Sinon, le nouveau numéro de page est émis vers le composant parent.

Les méthodes prev() et next() sont utilisées pour gérer les événements de la page précédente et de la page suivante et empêcher la réponse aux événements.

  1. ButtonPrev.vue
<template>
    <button
      class="btn-previous"
      :disabled="current === 1"
      @click="onPrev()">
      {{ prevText }}
    </button>
</template>

<script>
export default {
  props: {
    prevText: {
      type: String,
      default: '上一页'
    },
    current: {
      type: Number,
      default: 1
    }
  },
  methods: {
    onPrev () {
      this.$emit('onPrev');
    }
  }
}
</script>

<style scoped>
.btn-previous {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-right: 5px;
  background-color:#fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-previous:disabled {
  color: #ccc;
  cursor: default;
}
</style>

Dans le code ci-dessus, nous obtenons d'abord le numéro de page actuel (current) et les attributs de texte (prevText) du bouton de la page précédente via des accessoires. Dans le modèle, utilisez la liaison de classe (désactivée) pour contrôler l'état d'utilisation du bouton. Une méthode onPrev est définie, qui déclenche l'événement onPrev du composant parent.

  1. ButtonNext.vue
<template>
    <button
      class="btn-next"
      :disabled="current === total"
      @click="onNext()">
      {{ nextText }}
    </button>
</template>

<script>
export default {
  props: {
    total: {
      type: Number,
      default: 10
    },
    nextText: {
      type: String,
      default: '下一页'
    },
    current: {
      type: Number,
      default: 1
    }
  },
  methods: {
    onNext () {
      this.$emit('onNext');
    }
  }
}
</script>

<style scoped>
.btn-next {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-left: 5px;
  background-color: #fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-next:disabled {
  color: #ccc;
  cursor: default;
}
</style>

Dans le code ci-dessus, nous avons copié le code de ButtonPrev.vue et légèrement modifié le texte et les conditions de jugement.

  1. Page.vue
<template>
  <button :class="{ current: isSelected }" class="btn-page" @click="onPageSelected(page)">
    {{ page }}
  </button>
</template>

<script>
export default {
  props: {
    page: {
      type: Number,
      required: true
    },
    isSelected: {
      type: Boolean,
      default: false
    }
  },
  methods: {
    onPageSelected () {
      this.$emit('onPageSelected', this.page);
    }
  }
}
</script>

<style scoped>
.btn-page {
  border: none;
  color: #333;
  display: inline-block;
  font-size: 16px;
  padding: 6px 12px;
  margin-left: 5px;
  background-color: #fff;
  cursor: pointer;
  border-radius: 2px;
  box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
}
.btn-page.current {
  background-color: #0078d7;
  color: #fff;
}
</style>

Dans le code ci-dessus, nous avons obtenu la valeur du numéro de page (page) et l'attribut isSelected du bouton via les accessoires. Dans le modèle, utilisez la liaison de classe (« actuelle ») pour mettre en surbrillance la page sélectionnée.

Nous définissons également une méthode onPageSelected, qui déclenche l'événement onPageSelected du composant parent.

Enfin, ces composants peuvent être utilisés dans un modèle dans n'importe quelle application Vue.js, comme indiqué ci-dessous :

<template>
  <div>
    <pagination
      :total="total"
      :current="current"
      :maxShown="maxShown"
      :prevText="prevText"
      :nextText="nextText"
      @onPageChanged="onPageChanged"></pagination>
    <ul>
      <li v-for="(item, index) in items" :key="index">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
import Pagination from './Pagination.vue';

export default {
  components: {
    Pagination
  },
  data () {
    return {
      current: 1,
      maxShown: 10,
      prevText: '上一页',
      nextText: '下一页',
      total: 10,
      pageSize: 10,
      items: [{ name: 'Item 1' }, { name: 'Item 2' }, { name: 'Item 3' }]
    }
  },
  methods: {
    onPageChanged (page) {
      console.log('Page changed to: ', page);
      // 当前页面数据请求
    }
  }
}
</script>

Dans le code ci-dessus, nous avons introduit le composant Pagination et en avons fait un composant parent dans le modèle. Nous lions également total, current et maxShown au composant pour obtenir leurs valeurs. Dans la méthode onPageChanged, nous pouvons gérer l'événement de changement de page et demander les données correspondantes en fonction du numéro de page actuel.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Oguri Cap Build Guide | Un joli Musume Derby
3 Il y a quelques semaines By Jack chen
Guide de construction d'Agnes Tachyon | Un joli Musume Derby
3 Il y a quelques semaines By Jack chen
Guide de construction de Grass Wonder | Uma musume joli derby
2 Il y a quelques semaines By Jack chen
Pic comment émoter
1 Il y a quelques mois By Jack chen

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter des fonctions aux boutons pour Vue Comment ajouter des fonctions aux boutons pour Vue Apr 08, 2025 am 08:51 AM

Vous pouvez ajouter une fonction au bouton VUE en liant le bouton dans le modèle HTML à une méthode. Définissez la logique de la fonction de méthode et d'écriture dans l'instance Vue.

React vs. Vue: Quel framework utilise Netflix? React vs. Vue: Quel framework utilise Netflix? Apr 14, 2025 am 12:19 AM

NetflixUSESACustomFrameworkCalled "gibbon" builtonReact, notreactorVueDirectly.1) teamExperience: ChoOsBasedOnFamiliarity.

Frontend de Netflix: Exemples et applications de React (ou Vue) Frontend de Netflix: Exemples et applications de React (ou Vue) Apr 16, 2025 am 12:08 AM

Netflix utilise React comme cadre frontal. 1) Le modèle de développement composant de React et un écosystème fort sont les principales raisons pour lesquelles Netflix l'a choisi. 2) Grâce à la composante, Netflix divise les interfaces complexes en morceaux gérables tels que les lecteurs vidéo, les listes de recommandations et les commentaires des utilisateurs. 3) Le cycle de vie virtuel et composant virtuel de React optimise l'efficacité du rendu et la gestion de l'interaction des utilisateurs.

Comment sauter à la div de Vue Comment sauter à la div de Vue Apr 08, 2025 am 09:18 AM

Il existe deux façons de sauter des éléments div dans Vue: Utilisez le routeur Vue et ajoutez le composant routeur-link. Ajoutez l'écouteur de l'événement @Click et appelez ceci. $ Router.push () pour sauter.

React, Vue et l'avenir du frontend de Netflix React, Vue et l'avenir du frontend de Netflix Apr 12, 2025 am 12:12 AM

Netflix utilise principalement React comme cadre frontal, complété par Vue pour des fonctions spécifiques. 1) La composante de React et le DOM virtuel améliorent l'efficacité des performances et du développement des applications Netflix. 2) Vue est utilisée dans les outils internes et les petits projets de Netflix, et sa flexibilité et sa facilité d'utilisation sont essentielles.

Comment sauter une balise à Vue Comment sauter une balise à Vue Apr 08, 2025 am 09:24 AM

Les méthodes pour implémenter le saut d'une balise dans Vue incluent: l'utilisation de la balise A dans le modèle HTML pour spécifier l'attribut HREF. Utilisez le composant routeur-link du routage Vue. Utilisez cette méthode. $ Router.push () dans JavaScript. Les paramètres peuvent être passés à travers le paramètre de requête et les itinéraires sont configurés dans les options de routeur pour les sauts dynamiques.

Comment implémenter un saut de composants pour Vue Comment implémenter un saut de composants pour Vue Apr 08, 2025 am 09:21 AM

Il existe les méthodes suivantes pour implémenter le saut de composants dans Vue: Utilisez Router-Link et & lt; Router-View & gt; Composants pour effectuer un saut hyperlien et spécifiez: pour attribuer comme chemin cible. Utilisez le & lt; Router-View & gt; Composant directement pour afficher les composants rendus actuellement routés. Utilisez le router.push () et le router.replace () pour la navigation programmatique. Le premier sauve l'histoire et le second remplace l'itinéraire actuel sans quitter les enregistrements.

Comment développer une application Web Python complète? Comment développer une application Web Python complète? May 23, 2025 pm 10:39 PM

Pour développer une application Web Python complète, suivez ces étapes: 1. Choisissez le cadre approprié, tel que Django ou Flask. 2. Intégrez les bases de données et utilisez des orms tels que Sqlalchemy. 3. Concevez le frontal et utilisez Vue ou React. 4. Effectuez le test, utilisez Pytest ou Unittest. 5. Déployer les applications, utiliser Docker et des plates-formes telles que Heroku ou AWS. Grâce à ces étapes, des applications Web puissantes et efficaces peuvent être construites.

See all articles