第一种
在components文件夹里建一个pagination.vue组件
<template>
<div>
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="currentPage"
:page-sizes="pageSizes"
:page-size.sync="pageSize"
:layout="layout"
:background="background"
:total="total"
>
</el-pagination>
</div>
</template>
<script>
// import { scrollTo } from '@/utils/scroll-to'
export default {
name: "Pagination",
props: {
layout: {
type: String,
default: "total, sizes, prev, pager, next, jumper"
},
pageSizes: {
type: Array,
default() {
return [10, 20, 30, 50];
}
},
total: {
required: true,
type: Number
},
page: {
type: Number,
default: 1
},
limit: {
type: Number,
default: 20
},
autoScroll: {
type: Boolean,
default: true
},
background: {
type: Boolean,
default: true
}
},
computed: {
currentPage: {
get() {
return this.page;
},
set(val) {
this.$emit("update:page", val);
}
},
pageSize: {
get() {
return this.limit;
},
set(val) {
this.$emit("update:limit", val);
}
}
},
methods: {
handleSizeChange(val) {
this.$emit("pagination", { page: this.currentPage, limit: val });
// if (this.autoScroll) {
// scrollTo(0, 800)
// }
},
handleCurrentChange(val) {
this.$emit("pagination", { page: val, limit: this.pageSize });
// if (this.autoScroll) {
// scrollTo(0, 800)
// }
}
}
};
</script>
页面使用
<template>
<div>
<Pagination
v-show="total > 0"
:total="total"
:page.sync="form.pageNum"
:limit.sync="form.pageSize"
@pagination="getData"
/>
</div>
</template>
<script>
import Pagination from "@/components/pagination.vue";
export default {
components: {
Pagination
},
data() {
return {
form: {
pageNum: 1,
pageSize: 10
},
total: 200
};
},
methods: {
getData() {
console.log(this.form)
//请求接口
}
},
mounted() {
this.getData();
}
};
</script>
第二种
pagination.vue组件
<template>
<!-- 分页组件的封装 -->
<div class="pagination">
<el-pagination
@size-change="sizeChange"
@current-change="currentChange"
:page-sizes="[1, 5, 10, 15, , 20]"
layout="total, sizes, prev, pager, next, jumper"
:current-page="pageNum"
:page-size="pageSize"
:total="total"
:small="small"
>
</el-pagination>
</div>
</template>
<script>
export default {
name: "Pagination",
data() {
return { };
},
//子组件接收父组件的值
props: {
total: {
//总条目数
required: false, //是否必须
default: 0 //默认值
},
pageNum: {
required: false, //是否必须
default: 1 //默认值(默认第1页)
},
pageSize: {
required: false, //是否必须
default: 10 //默认值(默认显示10条)
},
small: {
//是否使用小型分页样式
required: false, //是否必须
type: Boolean, //类型
default: false //默认值
}
},
//计算属性 计算属性是基于他们的依赖做缓存
computed: {},
//侦听器 响应数据的变化
watch: {},
methods: {
// size变化
sizeChange(val) {
//子组件向父组件传值
this.$emit("sizeChange", val);
},
// 当前页变化
currentChange(val) {
//子组件向父组件传值
this.$emit("currentChange", val);
}
}
};
</script>
页面使用
<template>
<div>
<Pagination
v-show="total > 0"
:pageNum="this.form.page"
:total="total"
:pageSize="this.form.size"
@sizeChange="sizeChange"
@currentChange="currentChange"
/>
</div>
</template>
<script>
import Pagination from "@/components/pagination.vue";
export default {
components: {
Pagination
},
data() {
return {
form: {
page: 1,
size: 10
},
total: 200
};
},
methods: {
getData() {
console.log(this.form);
//请求接口
},
//上下页
currentChange(val) {
this.form.page = val;
this.getData();
},
//每页条数
sizeChange(val) {
this.form.size = val;
this.getData();
}
},
mounted() {
this.getData();
}
};
</script>