Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 9797|Respuesta: 0

[Vue] Pegatina técnica de Vue

[Copiar enlace]
Publicado en 25/7/2019 16:12:31 | | |

En primer lugar, la última oleada de renderizaciones:

Elementos básicos

En primer lugar, los elementos que comúnmente posee el componente buscapersonas (en adelante denominado "componente buscapersonas") son:

  • Anterior

  • Página 1

  • El número de página que aparece en el centro

  • Última página

  • Próximo


Las configuraciones necesarias para la inicialización son:

  • totalPágina

  • initPage

  • mostrarse Anterior (si mostrar la página anterior)

  • showNext (si mostrar la siguiente página)

  • mostrarElementos (unas páginas en el centro)

  • showJump (si mostrar el salto a qué página va)


Estos pueden recibirse a través de los accesorios de vue.

Además, el propio componente del buscapersonas debe tener una Página actual que registre la página actual, el array de páginas se utiliza para acomodar el número de página que se muestra en el centro, y el jumpPage encaja la entrada del número de página de salto.

Realización básica

El código correspondiente es:



  • <template>



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



  •         <div class="pager-pages">



  •             <a v-show="currentPage > 1 && showPrev" @click="go(currentPage - 1)" > la página anterior</a>



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



  •             <fuerte v-show="páginas[0] > 2">...</strong>



  •             <a v-for="página en páginas" :class="{activo: currentPage == página ? verdadero : falso}" @click="go(página)">{{página}}</a>



  •             <fuerte v-show="páginas[páginas.longitud-1] < totalPágina - 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)" > siguiente página</a>



  •         </div>



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



  •             <span>Total <em class="salto-total">{{totalPágina}}</em> página, saltar a</span>



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



  •             <span>Página</span>



  •             <a @click="go(jumpPage)" > determinado</a>



  •         </div>



  •     </div>



  • </template>



  • <script>



  •   exportar default {



  •         Utilería: {



  •             totalPágina: { // Número total de páginas



  •                 tipo: Número,



  •                 por defecto: 1,



  •                 Requerido: Verdadero



  •             },



  •             mostrarElementos: { // Número de páginas mostradas, por ejemplo: 1 ... 34[5]67 ... 10



  •                 tipo: Número,



  •                 Default: 5



  •             },



  •             mostrarPrev: { // si mostrar "Anterior"



  •                 tipo: booleano,



  •                 Por defecto: verdadero



  •             },



  •             mostrarSiguiente: { // Si mostrar "Siguiente"



  •                 tipo: booleano,



  •                 Por defecto: verdadero



  •             },



  •             mostrarSalto: { // si mostrar "Saltar"



  •                 tipo: booleano,



  •                 Por defecto: verdadero



  •             },



  •             initPage: {



  •                 tipo: Número,



  •                 Default: 1



  •             }



  •         },



  •         data () {



  •             return {



  •                 Página actual: 0,



  •                 páginas: [],



  •                 saltoPágina: 0,



  •             }



  •         },



  •         created() {// asignación de la Página actual en la inicialización



  •             this.currentPage = this.initPage



  •         }



  •         Métodos: {



  •             go (página) {



  •                 if(página < 1) {



  •                     página = 1



  •                 }



  •                 if(page > this.totalPage) {



  •                     página = esto.totalPágina



  •                 }



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



  •                     devolución



  •                 }



  •                 this.currentPage = parseInt(página,10)



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



  •                     página: esto.actualPágina



  •                 })



  •             }



  •         },



  •         Mira: {



  •             currentPage (newVal) {



  •                 this.jumpPage = newVal



  •             },



  •             initPage (newVal) {



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



  •                     this.currentPage = newVal



  •                 }



  •             }



  •         }



  •     }



  • </script>


El siguiente paso es cómo obtener el valor del array de páginas. Dado que las páginas siempre están fuertemente relacionadas con la página actual y los showItems que deben mostrarse en la configuración, es totalmente posible cambiar páginas a una propiedad calculada:



  • computed: {



  •     páginas () {



  •         El array de números de página se obtiene en función de los números de página de inicio y final



  •         let getPages = (inicio,fin) => {



  •             si(inicio <= 1 || inicio > fin || inicio >= esto.páginaTotal) {



  •                 Inicio = 2



  •             }



  •             if(fin >= this.totalPage || fin < inicio || fin <= 1) {



  •                 fin = esto.totalPágina - 1



  •             }



  •             Sea arr = []



  •             para (sea i = inicio; i <= fin; i++) {



  •                 arr.push(i)



  •             }



  •             Retorno de la Arr



  •         }



  •         lets conteos = this.showItems



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



  •             return 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 (esto.totalPágina + 1 - cuentas,esto.totalPágina - 1)



  •             } else {



  •                 sea la mitad = Math.ceil(cuentas/2) - 1



  •                 sea fin = esto.currentPage + mitad



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



  •                     end++



  •                 }



  •                 return getPages(this.currentPage - mitad,fin)



  •             }



  •         }



  •     }



  • }


Expansión funcional

En este punto, básicamente se implementa un componente ordinario de pasar páginas (el estilo puede personalizarse por sí solo). Sin embargo, muchas veces (especialmente en algunos perfiles de gestión), combinadas con vue-router para crear un SPA, suelen existir estos requisitos:

Después de pasar a una página de una lista, haz clic en un elemento para ir a la página de edición, y después de editar, quieres poder volver a la página antes de saltar.

Este requisito no es muy cómodo de implementar si solo usas el componente de buscapersonas anterior. Algunas personas pueden decir que está bien combinar vuex, pero en este caso es necesario registrar el número de página antes del salto en el estado. Si hay muchas listas de páginas que se pasan, obviamente no es elegante registrar varias páginas.

Sin embargo, debido a la elegancia de la implementación de Vue-Router, es fácil cumplir con los requisitos anteriores:
Primero, añade la configuración de modo en los props, porque cuando el modo es params, el salto necesita saber en qué ruta está, así que:



  • mode: {



  •     tipo: Cuerda,



  •     por defecto: 'evento' // 'evento' | 'consulta' | 'params'



  • },



  • routeName: {



  •     tipo: String



  • }


Luego haz algunos cambios en el método de lógica de salto real go(página):



  • go (página) {



  •     if(página < 1) {



  •         página = 1



  •     }



  •     if(page > this.totalPage) {



  •         página = esto.totalPágina



  •     }



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



  •         devolución



  •     }



  •     this.currentPage = parseInt(página,10)



  •     if(this.mode == 'consulta') {



  •         Let Query = this.$route.query



  •         query.page = this.currentPage



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



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



  •         Sea parámetros = this.$route.params



  •         params.page = this.currentPage



  •         esto.$router.go({nombre: este.nombreruta,params: params})



  •     } else {



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



  •             página: esto.actualPágina



  •         })



  •     }



  • }


Esto básicamente completa un componente simple y universal de pasar páginas, que no puede enviarse al repositorio para que todo el mundo lo use.
El componente de pasada de página finalmente implementado en este artículo ha sido lanzado, y puedes ver una oleada de código fuente:
vue-simple-pager







Anterior:Asp.net método de acción MVC en la llamada al método de acción de otro controlador
Próximo:Libros de Arquitectura de Ordenadores
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com