You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vue.js分页实现报错:$index未定义,求解决方法

解决Vue分页中$index未定义的错误

问题原因

你使用的是Vue 2.x或更高版本,但示例代码基于Vue 1.x编写。Vue 2.x已移除$index这类隐式循环索引变量,必须在v-for中显式声明才能使用索引值。

修复步骤

1. 修改列表循环的v-for语法

将模板中tbody区域的v-for改为显式声明索引的形式,同时把v-show里的$index替换为显式定义的索引变量:

<tr
  v-for="(hero, index) in heroes"
  v-show="setPaginate(index)"
>

2. 修正分页总数的计算逻辑

原代码中paginate_total的计算会出现小数(比如12条数据每页5条,结果为2.4),需在created钩子中取整:

created() {
  this.paginate_total = Math.ceil(this.heroes.length / this.paginate);
}

修复后的完整模板代码

<div id="heroes">
      <table class="table table-striped">
        <thead>
          <tr>
            <td>Hero Name</td>
            <td>Universe</td>
          </tr>
        </thead>
        <tbody>
          <tr
            v-for="(hero, index) in heroes"
            v-show="setPaginate(index)"
          >
            <td>{{ hero.name }}</td>
            <td>{{ hero.universe }}</td>
          </tr>
        </tbody>
      </table>
      <div id="pagination">
        <a
          href="#"
          class="btn btn-default"
          v-for="page_index in paginate_total"
          @click.prevent="updateCurrent(page_index + 1)"
        >
          {{ page_index + 1 }}
        </a>
      </div>
    </div>

额外优化建议

原代码中updatePaginate方法通过DOM查询计算分页总数,不符合Vue的响应式思想。建议维护一个筛选后的英雄数据列表,直接基于该列表的长度计算总页数,避免直接操作DOM。

内容的提问来源于stack exchange,提问作者jibzy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:05:18