用VUE定义一个分页组件自己使用

效果

在这里插入图片描述

项目用了nuxt的VUE框架和ElementUI框架,所以有几个步骤

一 定义组件

<template>
  <el-pagination
    :current-page="pageInfo.current"
    :page-size="pageInfo.size"
    :total="pageInfo.total"
    background
    layout="total, prev, pager, next"
    @current-change="handleCurrentChange"
    @prev-click="handlePrevClick"
    @next-click="handleNextClick"/>
</template>

<script>
export default {
  name: 'Pagination',
  //定义父组件传回的数据
  props: {
    pageInfo: {
      type: Object,
      required: true
    }
  },
  watch: {
    pageInfo: {
      handler: function(newVal, oldVal) {
        if (newVal.current === undefined) {
          newVal.current = 1
        }
      },
      //深度监听,不然只监听地址而已
      deep: true,
      immediate: true
    }
  },
  methods: {
    //父组件的函数
    handleCurrentChange(val) {
      //父组件的函数
      this.$emit('toPage', val)
    },
    handlePrevClick() {
      if (this.pageInfo.hasPrevious) {
        //父组件的函数
        this.$emit('toPage', this.pageInfo.current - 1)
      }
    },
    handleNextClick() {
      if (this.pageInfo.hasNext) {
        //父组件的函数
        this.$emit('toPage', this.pageInfo.current + 1)
      }
    }
  }
}
</script>

<style>
</style>

二 在plugins写一个pagination.js

import Vue from 'vue'
import Pagination from '@/components/Pagination.vue'

Vue.component('my-pagination', Pagination)

三 在nuxt.config.js中的plugins位置 引用 pagination.js

// 只看第二行(项目使用了swiper幻灯片)
  plugins: [
    '~/plugins/pagination.js',
    {src: '~/plugins/nuxt-swiper-plugin.js', ssr: false}],
  css: [
    'swiper/css/swiper.css'
  ],

四 父组件使用分页组件

//page-info是传到子组件的参数,toPage是子组件调用父组件的自定义函数名
<my-pagination
            :page-info="data"
            @toPage="getPage"/>

五 父组件定义子组件需要的函数

//teacherApi.getPageList()是一个自己定义的api,向后端请求数据的
// data是一个map,里面应该包含 records,total,size,current,hasNext,hasPrevious
getPage(val) {
      teacherApi.getPageList(val, 8).then(res => {
        this.data = res.data.data
      })
    }

注意点:向后端请求数据,返回的数据应该包含 size,current,total,pages,hasNext,hasPrevious,不然组件无数据的。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值