一、ElementUI分页器bug
使用ElementUI分页器时,可能会出现bug,比如分页器数字显示不正常、翻页之后表格数据不更新等等。这主要是由于分页器使用时没有考虑到某些细节问题。
解决这个问题可以尝试以下几个方法:
1、检查分页器设置:在使用分页器时,一定要仔细检查各个属性是否设置正确。比如total属性是否正确设置为数据总数,pageSize是否设置为每页显示的数据条数,page-size是否设置为页码按钮数量等。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
>
</el-pagination>
2、手动强制刷新:在表格的实例中添加一个key属性,并将其设置为一个变量。在需要强制刷新的时候,可以通过修改这个变量的值来强制刷新表格和分页器。
<el-table
:data="tableData"
:key="tableKey"
:default-sort="{prop: 'date', order: 'descending'}"
>
<el-table-column
prop="date"
label="日期"
sortable
width="120"
>
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="120"
>
</el-table-column>
</el-table>
export default {
data() {
return {
tableKey: 1,
tableData: [
{
date: '2022-01-01',
name: 'Tom'
}
]
}
},
methods: {
refreshTable() {
this.tableKey += 1
}
}
}
3、使用watch监听:使用watch来监听页码变化,手动修改分页器绑定的currentPage值,以达到刷新数据的目的。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
>
</el-pagination>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 50
}
},
methods: {
handleCurrentChange(val) {
this.currentPage = val
// 此处根据当前页码请求对应的数据
// ...
}
}
}
二、ElementUI表格添加索引
在ElementUI表格中,如果需要添加一列索引,可以使用表格的slot来实现。
<el-table
:data="tableData"
:default-sort="{prop: 'date', order: 'descending'}"
style="width: 100%"
>
<el-table-column
label="编号"
slot="index"
width="100"
>
<template slot-scope="{ $index }">
<span>{{ $index + 1 }}
三、ElementUI分页器样式修改
ElementUI默认的分页器样式可能会与某些网站的UI不一致,需要对其进行修改。可以通过以下方式来实现分页器样式的修改。
1、使用scoped样式:在使用分页器的组件中添加scoped样式,并对分页器中的class进行样式覆盖。
<template>
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
class="my-pagination"
>
</el-pagination>
</template>
<style scoped>
.my-pagination {
/* 样式覆盖 */
}
</style>
2、使用全局样式:在全局样式中对ElementUI中的分页器样式进行覆盖。
/* 全局样式 */
.el-pagination {
/* 样式覆盖 */
}
四、ElementUI分页page不生效
在使用ElementUI分页器时,可能会遇到page属性不生效的情况。
解决这个问题可以尝试以下几个方法:
1、检查pageSize属性:分页器的pageSize属性设置的是每页显示的数据条数,如果pageSize过小,page就会失效。可以尝试将pageSize设置为更大的值,比如50,100。
2、检查total属性:分页器的total属性设置的是总数据条数,如果total设置不正确,就会影响到分页器的page属性。可以尝试修改total的值。
3、手动修改page:可以使用watch来监听pageSize和total属性的变化,并手动修改page。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-count="pageCount"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
>
</el-pagination>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 50
}
},
computed: {
pageCount() {
return Math.ceil(this.total / this.pageSize)
}
},
methods: {
handleSizeChange(val) {
this.pageSize = val
this.currentPage = 1
},
handleCurrentChange(val) {
this.currentPage = val
// 根据当前页码请求对应的数据
// ...
}
},
watch: {
pageSize(newVal, oldVal) {
this.currentPage = 1
},
total(newVal, oldVal) {
this.currentPage = 1
}
}
}
五、ElementUI分页器
ElementUI分页器是网页中常见的一种组件,主要用于分页展示数据。在使用分页器时,需要注意以下几点:
1、分页器的total属性必须设置为总数据条数。
2、分页器的pageSize属性必须设置为每页显示的数据条数。
3、分页器的currentPage属性必须设置为当前页码。
4、分页器的@current-change事件必须绑定一个方法,用于监听页码变化。
5、分页器的layout属性用于设置分页器的布局,可以自定义。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
>
</el-pagination>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 50
}
},
methods: {
handleCurrentChange(val) {
this.currentPage = val
// 根据当前页码请求对应的数据
// ...
}
}
}
六、ElementUI分页二次封装
在实际开发中,我们会发现ElementUI提供的分页器并不满足我们的需求,需要对分页器进行二次封装。
封装的过程主要包括以下几个步骤:
1、封装分页器:将ElementUI分页器封装成一个组件,并对其进行扩展,添加一些自己需要的属性。
<template>
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
>
</el-pagination>
</template>
export default {
name: 'MyPagination',
props: {
pageSize: {
type: Number,
default: 10
},
currentPage: {
type: Number,
default: 1
},
total: {
type: Number,
default: 0
}
},
methods: {
handleCurrentChange(val) {
this.$emit('change', val)
}
}
}
2、引入组件:在需要使用分页器的组件中引入自定义的分页器组件,并绑定事件,以便在当前组件中监听页码变化。
<template>
<my-pagination
:page-size="pageSize"
:current-page="currentPage"
:total="total"
@change="handleChange"
>
</my-pagination>
</template>
import MyPagination from '@/components/MyPagination'
export default {
components: {
MyPagination
},
data() {
return {
pageSize: 10,
currentPage: 1,
total: 0
}
},
methods: {
handleChange(page) {
this.currentPage = page
// 根据当前页码请求对应的数据
// ...
}
}
}
七、ElementUI分页属性
在使用ElementUI分页器时,有一些属性是比较容易被忽略的。以下是常用的一些分页属性:
1、pageSize:每页显示的数据条数。
2、total:总数据条数。
3、page-size-choices:每页可选的数据条数。
4、layout:分页器的布局。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
>
</el-pagination>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 50
}
},
methods: {
handleCurrentChange(val) {
this.currentPage = val
// 根据当前页码请求对应的数据
// ...
}
}
}
八、ElementUI分页刷新后回到第一页
在一些场景中,我们需要在分页刷新后将页码重置为第一页。可以使用watch来监听pageSize和total属性的变化,并在变化时重置currentPage为1。
<el-pagination
v-model="currentPage"
:current-page.sync="currentPage"
:page-size="pageSize"
:total="total"
:page-size-choices="[10, 20, 30, 50]"
layout="total, sizes, prev, pager, next, jumper"
@current-change="handleCurrentChange"
>
</el-pagination>
export default {
data() {
return {
currentPage: 1,
pageSize: 10,
total: 50
}
},
methods: {
handleCurrentChange(val) {
this.currentPage = val