Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 9797|Répondre: 0

[Vue] Autocollant technique Vue

[Copié le lien]
Publié sur 25/07/2019 16:12:31 | | |

Tout d’abord, la dernière vague de rendus :

Éléments de base

Tout d’abord, les éléments couramment possédés par le composant pager (ci-après appelé le « composant pager ») sont :

  • Précédent

  • Page 1

  • Le numéro de page est montré au milieu

  • Dernière page

  • Prochain


Les configurations requises pour l’initialisation sont :

  • totalPage

  • initPage

  • Montrer Précédent (s’il faut afficher la page précédente)

  • showNext (s’il faut montrer la page suivante)

  • montrer des objets (quelques pages au milieu)

  • showJump (s’il faut montrer le saut vers la page où il mène)


Celles-ci peuvent être reçues via les accessoires de vue.

De plus, le composant pager lui-même doit avoir une page actuelle qui enregistre la page actuelle, le tableau des pages est utilisé pour accueillir le numéro de page affiché au centre, et le jumpPage lie l’entrée du numéro de page de saut.

Réalisation de base

Le code correspondant est :



  • <template>



  •     <div class="pager-wrapper » v-if="totalPage > 0">



  •         <div class="pager-pages">



  •             <a v-show="currentPage > 1 & showPrev » @click="go(currentPage - 1) » > la page précédente</a>



  •             <a :class="{active : currentPage == 1 ? true : false} » @click="go(1)">1</a>



  •             <fort v-show="pages[0] > 2">...</strong>



  •             <a v-for="page dans les pages » :class="{active : currentPage == page ? true : false} » @click="go(page)">{{page}}</a>



  •             <v-show fort="pages[pages.longueur-1] < totalPage - 1">...</strong>



  •             <a v-if="totalPage > 1 » :class="{active : currentPage == totalPage ? true : false} » @click="go(totalPage)">{{totalPage}}</a>



  •             <a v-show="currentPage < totalPage && showNext » @click="go(currentPage + 1) » > page suivante</a>



  •         </div>



  •         <div v-if="showJump » v-show="totalPage > 1 » class="pager-jump">



  •             <span>Total <em class="jump-total">{{totalPage}}</em> page, sauter à</span>



  •             <input type="number » min="1 » :max="totalPage » v-model="jumpPage » class="jump-input">



  •             <span>Page</span>



  •             <a @click="go(jumpPage) » > déterminé</a>



  •         </div>



  •     </div>



  • </template>



  • <script>



  •   export par défaut {



  •         accessoires : {



  •             totalPage : { // Nombre total de pages



  •                 type : Nombre,



  •                 par défaut : 1,



  •                 À recommander : Vrai



  •             },



  •             montreItems : { // Nombre de pages affichées, par exemple : 1 ... 34[5]67 ... 10



  •                 type : Nombre,



  •                 Défaut : 5



  •             },



  •             showPrev : { // s’il faut montrer « Précédent »



  •                 type : Booléen,



  •                 Par défaut : vrai



  •             },



  •             montreSuivante : { // S’il faut montrer « Suivant »



  •                 type : Booléen,



  •                 Par défaut : vrai



  •             },



  •             showJump : { // s’il faut montrer « Jump »



  •                 type : Booléen,



  •                 Par défaut : vrai



  •             },



  •             initPage : {



  •                 type : Nombre,



  •                 Défaut : 1



  •             }



  •         },



  •         data () {



  •             return {



  •                 CurrentPage : 0,



  •                 pages : [],



  •                 SautPage : 0,



  •             }



  •         },



  •         created() {// assignation currentPage lors de l’initialisation



  •             this.currentPage = this.initPage



  •         }



  •         Méthodes : {



  •             go (page) {



  •                 if(page < 1) {



  •                     page = 1



  •                 }



  •                 if(page > this.totalPage) {



  •                     page = ce.totalPage



  •                 }



  •                 if(page === this.currentPage) {



  •                     Retour



  •                 }



  •                 this.currentPage = parseInt(page,10)



  •                 this.$emit('go-page',{



  •                     page : this.currentPage



  •                 })



  •             }



  •         },



  •         Regardez : {



  •             currentPage (newVal) {



  •                 this.jumpPage = newVal



  •             },



  •             initPage (newVal) {



  •                 if(this.currentPage !== newVal) {



  •                     this.currentPage = newVal



  •                 }



  •             }



  •         }



  •     }



  • </script>


L’étape suivante est de savoir comment obtenir la valeur de la page array. Puisque les pages sont toujours fortement liées à la page actuelle et aux showItems qui doivent être affichés dans la configuration, il est tout à fait possible de changer les pages pour une propriété calculée :



  • computed: {



  •     pages () {



  •         Le tableau des numéros de page est obtenu en fonction des numéros de page de début et de fin



  •         let getPages = (début,fin) => {



  •             if(start <= 1 || start > end || start >= this.totalPage) {



  •                 start = 2



  •             }



  •             if(fin >= this.totalPage || fin < début || fin <= 1) {



  •                 fin = ce.totalPage - 1



  •             }



  •             soit arr = []



  •             pour (soit i = commencer ; i <= fin ; i++) {



  •                 arr.push(i)



  •             }



  •             retour arr



  •         }



  •         laissons compter = this.showItems



  •         if(this.totalPage < compte + 2) {



  •             retourner getPages(2,this.totalPage)



  •         } else {



  •             if(this.currentPage <= Math.ceil(counts/2)) {



  •                 return getPages(2,counts)



  •             } else if(this.currentPage >= this.totalPage - Math.floor(counts/2)) {



  •                 return getPages(this.totalPage + 1 - counts,this.totalPage - 1)



  •             } else {



  •                 soit la moitié = Math.ceil(comptes/2) - 1



  •                 soit fin = this.currentPage + moitié



  •                 si(compte % 2 === 0) {



  •                     End++



  •                 }



  •                 return getPages(this.currentPage - half,end)



  •             }



  •         }



  •     }



  • }


Expansion fonctionnelle

À ce stade, un composant classique de tournage de pages est essentiellement implémenté (le style peut être personnalisé seul). Cependant, souvent (notamment pour certains parcours de gestion), combinés à vue-router pour créer un SPA, il existe généralement ces exigences :

Après avoir tourné une page dans une certaine liste, cliquez sur un élément pour aller à la page d’édition, et après modification, vous voulez pouvoir revenir à la page avant de sauter.

Cette exigence n’est pas très pratique à mettre en œuvre si vous n’utilisez que le composant de pager ci-dessus. Certaines personnes diront qu’il est acceptable de combiner Vuex, mais dans ce cas, il est nécessaire d’enregistrer le numéro de page avant le saut dans l’État. S’il existe de nombreuses listes de feuilletons de pages, il n’est évidemment pas judicieux d’enregistrer plusieurs pages.

Cependant, grâce à l’élégance de l’implémentation Vue-Router, il est facile de répondre aux exigences ci-dessus :
D’abord, ajoutez la configuration de mode sur les props, car lorsque le mode est params, le saut doit savoir sur quelle route il se trouve, donc :



  • mode: {



  •     type : Corde,



  •     par défaut : 'événement' // 'événement' | 'requête' | « params »



  • },



  • routeName: {



  •     type : Corde



  • }


Ensuite, apportez quelques modifications à la méthode logique de saut réelle go(page) :



  • go (page) {



  •     if(page < 1) {



  •         page = 1



  •     }



  •     if(page > this.totalPage) {



  •         page = ce.totalPage



  •     }



  •     if(page === this.currentPage) {



  •         Retour



  •     }



  •     this.currentPage = parseInt(page,10)



  •     if(this.mode == 'requête') {



  •         Laissons requête = this.$route.query



  •         query.page = this.currentPage



  •         this.$router.go({query : query})



  •     } else if(this.mode == 'params') {



  •         Soient les params = this.$route.params



  •         params.page = ce.currentPage



  •         this.$router.go({name : this.routeName,params : params})



  •     } else {



  •         this.$emit('go-page',{



  •             page : this.currentPage



  •         })



  •     }



  • }


Cela complète essentiellement un composant simple et universel de tournage de page, qui ne peut pas être envoyé au dépôt pour que tout le monde puisse l’utiliser.
Le composant de tournage de pages enfin implémenté dans cet article a été publié, et vous pouvez voir une vague de code source :
vue-simple-pager







Précédent:Asp.net méthode d’action MVC dans l’appel à la méthode d’action d’un autre contrôleur
Prochain:Livres d’architecture informatique
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com