个人技术总结——Vue根据分页插件的页码,使视图监听数据变化而实时刷新
| 这个作业属于哪个课程 | 软件工程实践2022春-F班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
| 这个作业的目标 | 个人技术总结 |
| 其他参考文献 | 【重学前端框架】Vue中的视图更新原理(一) |
目录
- 技术概述
- 技术详述
- 遇到的问题和解决过程
- 总结
- 参考文献、博客
技术概述
当我们使用v-for展现数组数据时,如果数组会随着分页插件按钮的点击而变化,如何做到实时监听数组并呈现数据呢?
效果如下图所示。

难点在于我们需要强制vue监听数组,或者数组有变化时就强制刷新。官方文档关于检测数组变化的解释如下:

技术详述
1.将分页插件设置如下:

其中
smallCurrentPage2表示每个楼层分页插件的当前页码,监听分页页码的函数是handleSmallCurrentChange2()
2.定义二维数组

3.将handleSmallCurrentChange2()设置如下:

其中
tempReplylist:[[]]是定义在data()中的二维数组,slice()将本楼层中所有的回复根据页码进行切割,存放到this.tempReplylist中
最重要的是一定要用 this.$set(数组名,下标,数值) 替代 数组名[下标]=数值
总体代码如下:
<div v-for="(item,index) in tempReplylist[scope.row.id]" :key="index" >
//...省略用于排版的模块
</div>
<div v-if="scope.row.replylist.length>2">
<el-pagination
@current-change="(smallCurrentPage2) =>handleSmallCurrentChange2(scope.row.id,smallCurrentPage2,scope.row.replylist)"
:page-size="smallPageSize"
:current-page="smallCurrentPageMap.get(scope.row.id.toString())"
layout="prev, pager, next, jumper"
prev-text="上一页"
next-text="下一页"
:total=smallTotalNum>
</el-pagination>
</div>
遇到的问题和解决过程
改变数据格式:
1.使用一维数组标记是哪个楼层的页码发生变化,此时的this.$set(..)不起作用,无法更新。
2.使用Map配合this.$forceUpdate(),(必要时设置函数延迟执行),理论上行得通,但在我这里无法达到实际要求。
3.使用二维数组,用楼层id标记并获取楼层的评论内容,即tempreplylist[id]=评论内容数组,此时评论内容数组会随时变化,就无需存储楼层页码数据
改变布局方式:
1.将页面布局用el-table替代v-for,此时因为el-table具有固定的行间距,不知道如何修改(一旦修改则整个页面的行间距都发生变化),无法达到原来的布局要求。
总结
el-pagination分页组件与v-for结合使用时,数据应存放在二维数组,即数组名[id]=页码对应内容数组,使用 this.$set(数组名,下标,数值) 替代 数组名[下标]=数值。
参考文献、博客
- 【重学前端框架】Vue中的视图更新原理(一) 作者:贝er
相关推荐
解决vue 路由变化页面数据不刷新的问题
下面小编就为大家分享一篇解决vue 路由变化页面数据不刷新的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Vue3路由实战:从基础配置到动态路由、导航守卫与组件缓存
在单页面应用(SPA)开发中,路由是实现页面导航与状态管理的核心技术。其原理是通过监听URL变化,动态匹配并渲染对应组件,实现无刷新页面切换。这项技术的核心价值在于提升用户体验与应用性能,支持前进后退、深度链接等原生浏览器行为。在实际工程中,路由管理广泛应用于后台管理系统、电商平台等复杂前端项目,负责处理页面流、权限控制与状态同步。本文聚焦于Vue Router 4在Vue3环境下的实战应用,深入解析动态路由参数传递、导航守卫权限验证等高频场景,并针对Vue3三级嵌套路由缓存页面失效等典型问题,提供结合 `
vue在App.vue文件中监听路由变化刷新页面操作
在路由跳转时,会出现页面需要重新刷新一遍才能获取数据加载页面,这时添加一个监听器,如果跳转到页面刷新一次。 export default { name: 'App', provide(){ return{ reload:this.reload } }, data(){ return { isRouterAlive:true, } }, //监听器 watch: { // 方法1 '$route' (to, from) { //监听路由是否变化 // console.log(999) if(to.path == /){ //跳转到哪个页面 lo
vue实现前端分页完整代码
主要为大家详细介绍了vue实现前端分页完整代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
vue中的watch监听数据变化及watch中各属性的详解
主要介绍了vue中的watch监听数据变化及watch中的immediate、handler和deep属性详解,本文大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧


