vue3封装分页组件

1.新建Pagination文件以及该文件夹下新建index.vue

2.在index.vue文件中编写一下代码

<template>
  <div :class="{ 'hidden': hidden }" class="pagination-container">
    <el-pagination
      :background="background"
      v-model:current-page="currentPage"
      v-model:page-size="pageSize"
      :layout="layout"
      :page-sizes="pageSizes"
      :pager-count="pagerCount"
      :total="+total"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>

<script setup>
import { scrollTo } from '@/utils/scroll-to'

const props = defineProps({
  total: {
    required: true,
    type: Number
  },
  page: {
    type: Number,
    default: 1
  },
  limit: {
    type: Number,
    default: 20
  },
  pageSizes: {
    type: Array,
    default() {
      return [30, 60, 100]
    }
  },
  // 移动端页码按钮的数量端默认值5
  pagerCount: {
    type: Number,
    default: document.body.clientWidth < 992 ? 5 : 7
  },
  layout: {
    type: String,
    default: 'total, sizes, prev, pager, next, jumper'
  },
  background: {
    type: Boolean,
    default: true
  },
  autoScroll: {
    type: Boolean,
    default: true
  },
  hidden: {
    type: Boolean,
    default: false
  }
})

const emit = defineEmits();
const currentPage = computed({
  get() {
    return props.page
  },
  set(val) {
    emit('update:page', val)
  }
})
const pageSize = computed({
  get() {
    return props.limit
  },
  set(val){
    emit('update:limit', val)
  }
})
function handleSizeChange(val) {
  if (currentPage.value * val > props.total) {
    currentPage.value = 1
  }
  emit('pagination', { page: currentPage.value, limit: val })
  if (props.autoScroll) {
    scrollTo(0, 800)
  }
}
function handleCurrentChange(val) {
  emit('pagination', { page: val, limit: pageSize.value })
  if (props.autoScroll) {
    scrollTo(0, 800)
  }
}

</script>

<style scoped>
.demo-pagination-block {
  position: fixed;
  bottom: 20px;
  right: 20px;
  width: 50vw;
  padding-bottom: 20px;
  background: #fff;
  z-index: 99;

  .pagination-container {
    margin-top: 0;
  }
}
.pagination-container {
  background: #fff;
  padding: 0 16px 20px;
}
.pagination-container.hidden {
  display: none;
}
</style>

3.使用封装的组件

<div class="demo-pagination-block">
 <pagination :total="data.total" v-model:page="searchParams.pageNum" v-model:limit="searchParams.pageSize"
 @pagination="getList" />
</div>
import { pageList } from '@/api/dataScheduling/portDataList'

const searchParams = reactive({
    containerNo: '', // 集装箱号
    searchDate: '', // 筛选时间
    dataStatus: '', // 状态
    shipName: '', // 船名
    destinationPort: '', // 目的港
    pageNum: 1, // 页码
    pageSize: 30, // 条数
});

const data = reactive({
    total: 10, // 总条数
    tableData: [], // 数据列表
});
onMounted(() => {
    getList();
});

// 获取数据列表
const getList = () => {
    let params = { ...searchParams }
    pageList(params).then(res => {
        console.log('获取列表', res);
        data.tableData = res.rows
        data.total = res.total
    })
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中封装分页组件的方法与Vue2有所不同。以下是一个基本的封装分页组件的方法: 1. 首先,在你的项目中创建一个名为`Pagination.vue`的组件文件。 2. 在`Pagination.vue`组件中,你可以使用`<template>`标签来定义组件的结构。可以使用`<div>`标签来包裹分页组件的内容,比如页码和按钮。 3. 在`<script>`标签中,你需要导入`vue`并声明组件。你可以使用`ref`来追踪当前页码,并且使用`computed`属性来计算总页数。 4. 在组件内部,你可以创建一个`methods`对象,并在其中定义一些方法来处理页码的变化。比如,你可以创建`goToPage`方法来跳转到指定的页码。 5. 最后,在`<style>`标签中,你可以定义组件的样式,如页码的颜色和按钮的样式。 在你的项目中使用这个封装分页组件的方法如下: 1. 在需要使用分页功能的组件中,使用`import`关键字导入刚刚封装的`Pagination`组件。 2. 在`components`属性中注册`Pagination`组件。 3. 在`<template>`标签中使用自定义的分页组件。可以使用`v-model`指令来双向绑定当前页码。 通过上述步骤,你就可以在Vue3中封装一个分页组件并在项目中使用了。这个组件可以提供分页功能,让用户可以方便地切换页码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于Vue如何封装分页组件](https://download.csdn.net/download/weixin_38550605/12789728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Vue3 element-ui实现Pagination分页组件--封装分页](https://blog.csdn.net/coinisi_li/article/details/128952886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值