vue3项目中文字太多超过3行显示省略号和查看更多按钮

项目中设计的介绍文字较多,需求是超过三行显示省略号和查看更多按钮,这种看似简单,写起来也需要花费些心思,效果和主要代码如下:

1.试图部分

<div class="yuanqu-con">
        <div class="text" v-if="isAll == 0" ref="myDiv">
          <span class="btn" @click="lookmore" v-if="isMore == 1">查看更多</span>
          <div class="text-con" ref="textMore">
            {{ baseData.desc }}
          </div>
        </div>
        <div v-if="isAll == 1">
          {{ baseData.desc }}
        </div>
      </div>

2.判断内容高度是否显示查看更多按钮

nextTick(() => {
          // 判断div的高度是否显示按钮
          if (textMore.value.clientHeight >= myDiv.value.clientHeight) {
            isMore.value = 1
          } else {
            isMore.value = 0
          }
        })

3.点击查看更多按钮展示全部内容

const isAll = ref(0)
  const lookmore = () => {
    isAll.value = 1
  }

4.css相关

 .yuanqu-con {
        width: 1139px;
        font-size: 14px;
        color: #202332;
        /* line-height: 22px; */

        .text {
          display: -webkit-box;
          -webkit-line-clamp: 3;
          -webkit-box-orient: vertical;
          overflow: hidden;
        }

        .text::before {
          content: '';
          float: right;
          height: 43px;
          /*先随便设置一个高度*/
          background: #fff;
        }

        /* .text::after {
            content: '';
            width: 100%;
            height: 65px;
            position: absolute;
            background: #fff;
            } */
        .btn {
          float: right;
          clear: both;
          cursor: pointer;
          color: #4876ff;
        }
      }
    }

<think>好的,用户之前遇到了分页组件显示过多页码的问题,我之前已经给出了解决方案,但现在用户反馈问题依旧存在,分页页码还是多出来好多。我需要进一步分析可能的原因,并提供更深入的解决方案。 首先,用户提到的分页页码过多,可能是指页码数量超出了预期,比如总页数计算错误,导致分页组件显示太多页码按钮。需要检查几个关键点: 1. **总记录数(total)是否正确**:如果后端返回的total值过大,前端计算出的总页数也会过大,导致页码过多。需要确认后端返回的total是实际数据总数,而不是其他值。 2. **分页组件的page-count或pager-count属性**:Element UI的el-pagination组件可能有默认的页码显示数量,如果数据量很大,会显示更多页码或使用省略号。用户可能期望限制显示的页码数量,需要检查是否有相关属性设置。 3. **前端分页计算逻辑**:虽然el-pagination会自动根据totalsize计算总页数,但如果手动设置了某些参数,可能会导致错误。 接下来,我需要回顾用户提供的代码,查看是否有遗漏的配置。用户之前的代码中,el-pagination的布局是layout="prev, pager, next",没有设置page-count,这可能让组件根据总页数自动调整显示的页码数量。当总页数很大时,pager部分会显示较多页码或使用省略号,这可能让用户感觉“多出来好多”。 可能的解决方案包括: - 检查后端返回的total是否正确,确保不是分页后的总数而是所有记录的总数。 - 在el-pagination中设置pager-count属性,限制显示的页码数量,例如最多显示7个页码按钮。 - 确认每页条数(size)是否正确,避免size过小导致总页数过大。 - 检查是否有前端或后端的缓存问题,导致旧的错误数据被使用。 另外,用户可能误解了分页组件的为,比如当总页数较多时,组件会自动折叠部分页码,显示省略号,但这可能被用户视为问题。需要确认用户的实际期望组件表现之间的差异。 还需要考虑用户是否正确应用了之前建议的修复步骤,比如Thymeleaf表达式的修正、参数类型转换等。如果用户没有完全按照建议修改,可能导致问题依旧存在。 可能的进一步排查步骤: 1. 让用户提供当前dataArray的实际值,特别是total、size、current字段,确认数据正确。 2. 检查浏览器控制台是否有错误提示,比如数据转换失败。 3. 确认分页组件是否受到自定义CSS的影响,导致布局异常。 4. 测试在不同数据量下分页的表现,确认问题是否只在特定情况下出现。 总结,需要从数据源、组件配置、参数传递、样式影响等多个方面进排查,逐步缩小问题范围,找到根本原因。</think>--- ### 分页页码过多问题深度解决方案 --- #### 一、现象复现条件分析 当出现**页码数量明显超过预期**时,通常由以下原因导致: 1. **总记录数(total)异常膨胀**:后端返回的`total`值远大于实际数据量 2. **分页尺寸(size)未生效**:每页显示数量未正确传递到分页计算 3. **分页组件配置缺失**:未限制可视页码范围 --- #### 二、关键修复步骤 ##### 1. 验证数据源头 在浏览器控制台执以下命令,检查实际数据: ```javascript console.log(&#39;分页数据验证:&#39;, { total: dataArray.total, // 应为数据库总记录数(非分页数) size: dataArray.size, // 每页预期显示数量(如10/20) current: dataArray.current // 当前页码(从1开始) }); ``` **常见问题示例**: - 若`total=1000`但实际只有10条数据 → 后端分页查询逻辑错误 - 若`size=undefined` → 前端参数解析失败 --- ##### 2. 强制约束分页组件显示范围 在`el-pagination`中添加`pager-count`属性: ```html <el-pagination layout="prev, pager, next" :pager-count="7" <!-- 控制显示最多7个页码按钮 --> :total="total" :current-page="currentPage" @current-change="handleCurrentChange"> </el-pagination> ``` **效果说明**: - 总页数≤7时显示所有页码 - 总页数>7时自动折叠中间页码(显示省略号) --- ##### 3. 强化分页计算防御 修改Vue数据处理逻辑: ```javascript data() { // 深度校验服务端返回数据 const safeTotal = Math.max(Number(dataArray.total) || 0, 0); const validSize = Math.max(Number(dataArray.size) || 10, 1); return { total: safeTotal, size: validSize, currentPage: Math.max(Number(dataArray.current) || 1, 1), tableData: Array.isArray(dataArray.records) ? dataArray.records : [] } } ``` **优化点**: - 使用`Math.max()`防止负值 - 数组类型校验避免null/undefined导致的渲染错误 --- ##### 4. 分页跳转增强校验 ```javascript handleCurrentChange(newPage) { // 计算实际总页数 const totalPage = Math.ceil(this.total / this.size); // 阻止无效跳转 if (newPage < 1 || newPage > totalPage) { console.warn(&#39;无效页码:&#39;, newPage); return; } // 执跳转 window.location.href = `/index?page=${newPage}&size=${this.size}`; } ``` **新增保护机制**: - 动态计算最大有效页码 - 拦截超出范围的请求 --- #### 三、服务端联动校验清单 | 检查项 | 正常状态 | 异常处理 | |-------------------------|-----------------------------------|----------------------------------| | 总记录数(total) | =数据库COUNT查询结果 | 检查SQL是否包含错误LIMIT条件 | | 每页条数(size) | =前端传入值或默认值(如未传参) | 强制转换并设置默认值 | | 当前页码(current) | =前端传入值≥1 | 自动重置为1 | | 数据列表(records) | 长度≤size且对应页码数据 | 返回空数组并警告 | --- #### 四、终极验证方案 1. **制造可控测试数据**: ```javascript // 手动覆盖测试数据(总200条,每页10条) dataArray = { total: 200, size: 10, current: 3, records: new Array(10).fill({/*模拟数据*/}) }; ``` 2. **预期分页表现**: - 总页码应显示20页(200/10) - 当前选中第3页 - 页码显示区域为:1, 2, **3**, 4, 5, 6, 7 + 末尾省略号 3. **异常情况处理演示**: ```javascript // 测试异常size值 dataArray = { total: 50, size: "abc" }; // 预期结果:size被重置为10,总页码=5 ``` --- #### 五、常见问题速查表 | 现象 | 可能原因 | 解决方案 | |--------------------------|---------------------------|------------------------------| | 页码数量超过数据实际需求 | 1. total值错误<br>2. 未设置pager-count | 校验后端数据 + 配置组件属性 | | 页码显示不全/被折叠 | 总页数超过pager-count设置 | 调整pager-count值(建议5-11)| | 页码点击无响应 | current-page未双向绑定 | 使用v-model绑定当前页码 | 通过以上系统级排查修正,可精准控制分页组件的页码显示范围。若问题仍未解决,建议提供具体的total/size/current数值组合页面截图以便进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值