使用elementui 的el-pagination分页组件current页数报错了
报错信息:
found in
---> <Pagination> at src/components/pagination.vue
<ElCol> <ElRow>
<ReportList> at src/views/report/list.vue
<Index> at src/views/layout/index.vue
<App> at src/App.vue
<Root>
[vue警告]:避免直接更改支柱,因为每当父组件重新呈现时,值都会被覆盖。相反,使用基于支柱值的数据或计算属性。
问题描述:
我把分页参数保存在vuex里的。
在页面需要分页的地方。如果我直接使用elementui 的分页组件。就不会报错。
目前我把这个分页组件单独写在一个子组件里面的。拆分成组件后。功能是可以正常使用的。但是我每次点击那个上一页。下一页。就会报这个错。
下面是我的代码:
子组件:
<template> <!-- 分页组件 -->
<div class="common-pagination-wrap">
<el-pagination
background
layout="total,sizes, prev, pager, next, jumper"
prev-text="上一页"
next-text="下一页"
:small="$store.state.isMobile ? true : false"
:hide-on-single-page="false"
:page-size="size"
:page-sizes="[2,5,10, 20, 30, 40]"
:total="total"
:current-page.sync="current"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"></el-pagination>
</div>
</template>
<script>
export default {
props: {
total: {
required: true,
type: [Number, String],
default: 1,
}, // 数据总条数
size: {
required: true,
type: [Number, String],
default: 10,
}, // 每页显示条数
current: {
required: true,
type: [Number, String],
default: 1,
}, // 当前页
},
data() {
return {}
},
components: {},
methods: {
/**
* 每页显示个数选择器的选项设置
* @param val
*/
handleSizeChange(size) {
console.log(`每页 ${size} 条`)
this.size = size
// 通知父组件页数改变,并传参新的页数
this.$emit('onSizeChange', size)
},
/**
* 当前页面改变事件
* @param current {Number} 当前页
**/
handleCurrentChange(current) {
console.log(current)
// 通知父组件页数改变,并传参新的页数
this.$emit('onCurrentChange', current)
},
},
}
</script>
父组件:
<!-- 分页区域 --> <el-row class="pagination-part">
<el-col align="center">
<pagination
:total="pageOption.total"
:size="pageOption.size"
:current="pageOption.current"
@onCurrentChange="onCurrentChange">
分页
</pagination>
</el-col>
</el-row>
</div>
</div>
</div>
</template>
<script>
import pagination from '@/components/pagination'
import {saveAs} from "file-saver"
import htmlDocx from "html-docx-js/dist/html-docx"
export default {
name: 'helperList',
data() {
return {
pageOption: null, // 页面参数,从vuex store中获取
tableData: [],
}
},
components: {
pagination,
},
computed: {},
methods: {
// 从vuex store中获取存储的页面参数
setPageOption() {
this.pageOption = this.$store.state.helperOption
},
/**
* 分页改变
* @param current {Number} 页数
*/
onCurrentChange(current) {
this.pageOption.current = current
// 重新获取数据
this.onSearch()
},
// 搜索
onSearch() {
// 搜索参数
const axiosParam = this.pageOption
console.log('搜索参数', axiosParam)
// 进行搜索
this.$API.getProblemAssistantList(axiosParam).then(res => {
console.log(res)
console.log(res.data.rows)
this.tableData = res.data.rows
this.pageOption.total = res.data.total
}).catch(err => {
console.log(err)
})
},
vuex:
reportOption: { title: null, // 标题名称
startTime: null, // 操作开始日期
endTime: null, // 操作结束日期
year: null, // 年份
month: null, // 月份
current: 1, // 分页当前页
size: 5, // 分页每页显示条数
total: 1000, // 数据总条数
},
我自己没有专门去设置这个页数。只有在点击上一页下一页的时候。会触发elementui 自己的分页组件。那个页数会自己改变。所以是这样原因导致报错的吗?我该怎么修改呢?
回答:
current-page 是一个 v-model, 翻页的时候组件会直接修改current的值,而你的current是props,vue又不允许修改,所以就存在这个警告了。
你把current定义到当前组件即可, 如果父组件需要这个值,你可以通过emit传递过去
回答:
解决办法:
根据大佬的建议。我把子组件里的参数写到data里去就可以了:
以上是 使用elementui 的el-pagination分页组件current页数报错了 的全部内容, 来源链接: utcz.com/p/937063.html