用vuejs实现一个简单的分页条

html模板

<ul>

    <li class="prev" :class="{disabled: search.page == 1}" @click="prev()">
        <a href="#">«上一页</a>
    </li>

    <li :class="[{active: search.page == index(i)}]" v-for="i in Math.min(5,totalPage)" 
@click="search.page = index(i)">
        <a href="#">{{index(i)}}</a>
    </li>

    <li class="dotted"><span>...</span></li>

    <li class="next" :class="{disabled: search.page == totalPage}" @click="next()">
        <a href="#">下一页»</a>
    </li>

</ul>

js代码

index(i){
   if (this.search.page<=3 || this.totalPage <= 5){
       return i;
   }else if(this.search.page >= this.totalPage-2){
       return this.totalPage-5+i;
   }else{
       return this.search.page-3+i;
   }
},

1.展示多少个正块

如果总页数小于5,就展示‘’总页数‘’个方块;如果总页数大于5,就展示5个方块。

2.方块里面的数字显示什么

a. index方法

         html模板的v-for循环里的 i 从1 到5 循环。我们把i用index(i)方法过滤一下,展示到方块上。

         index方法是传入i,返回一个数字。该数字就是方块展示的数字。

c. index方法的逻辑

         如果 当前页<=3 或 总页数  <=5  ,方块应该展示的数字就应该是1 到 5,或1到总页数。

         如果 当前页是后三页,且总页数大于5,方块应该展示的数字是 总页数-5+i

         如果 当前页是前三页和后三页之间,且总页数大于5,此时,方块应该展示的的数字是当前页-3+i。

3.点击某个方块,使该方块变成选中状态

        给方块绑定一个动态样式,当前页==index(i)时,把这个方块变成选中的样式。

           :class="[{active: search.page == index(i)}]"

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js 实现本地数据的筛选和分页功能,可以分为以下几个步骤: 1. 准备数据 首先需要准备一份数据,可以是数组或者对象,包含了需要筛选和分页展示的数据。 2. 筛选数据 在 Vue 组件中,可以使用计算属性 computed 来筛选数据。在计算属性中,使用 JavaScript 数组的 filter 方法过滤数据。例如,如果需要根据关键字筛选数据,可以这样实现计算属性: ```javascript computed: { filteredData() { return this.data.filter(item => item.title.indexOf(this.keyword) !== -1); } } ``` 这里假设数据中每个对象都有一个 title 属性,我们通过输入框绑定的 keyword 来过滤 title 中包含关键字的数据。 3. 分页数据 分页功能可以使用第三方组件库,例如 Element UI 的分页组件,也可以自己实现。自己实现分页功能的思路,主要包括以下几个步骤: - 定义每页展示的数据数 pageSize。 - 根据 pageSize 计算出总页数 totalPage。 - 定义当前页码 currentPage,默认为 1。 - 根据 currentPage 和 pageSize,计算出当前页展示的数据列表 currentData。 - 点击页码时,改变 currentPage 的值,从而更新 currentData。 具体实现可以参考下面的代码示例: ```javascript <template> <div> <input v-model="keyword" placeholder="请输入关键字"> <ul> <li v-for="item in currentData" :key="item.id">{{ item.title }}</li> </ul> <el-pagination :current-page="currentPage" :page-size="pageSize" :total="filteredData.length" @current-change="handlePageChange" /> </div> </template> <script> export default { data() { return { keyword: '', pageSize: 10, currentPage: 1, data: [ { id: 1, title: 'Vue.js 实战教程' }, { id: 2, title: 'JavaScript 高级编程' }, ... ], }; }, computed: { filteredData() { return this.data.filter(item => item.title.indexOf(this.keyword) !== -1); }, currentData() { const startIndex = (this.currentPage - 1) * this.pageSize; const endIndex = startIndex + this.pageSize; return this.filteredData.slice(startIndex, endIndex); }, }, methods: { handlePageChange(currentPage) { this.currentPage = currentPage; }, }, }; </script> ``` 在上面的代码中,我们使用了计算属性 filteredData 来筛选数据,用 currentData 来分页展示数据。在分页组件上,监听 current-change 事件,调用 handlePageChange 方法来更新 currentPage 的值,从而更新 currentData。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值