zoukankan      html  css  js  c++  java
  • VUE BOOTSTRAP分页组件

    <template>
        <div id="pagenation" class="row justify-content-center">
            <div class="col-auto">
                <ul v-if="pagenation.total>pagenation.pageSize" class="pagination ">
                    <li class="page-item">
                        <a href="javascript:void(0);" @click="startPage" class="page-link">首页</a>
                    </li>
                    <li v-for="i in displayPage"
                        :key="'pagenation_'+i" :class="pagenationItemActive(i)">
                        <a href="#" @click="selectPage(i)" class="page-link">{{i}}</a>
                    </li>
                    <li class="page-item ">
                        <a href="javascript:void(0);" @click="endPage" class="page-link">尾页</a>
                    </li>
                </ul>
            </div>
            <div class="col-auto  mb-3">
                <div class="input-group" style=" 150px">
                    <input type="text" class="form-control" :placeholder="jumpPageNumPlaceholder" v-model.number="jumpPageNum">
                    <div class="input-group-append">
                        <button @click="jumpPageClick" @blur="jumpPageBlur" class="input-group-text">跳转</button>
                    </div>
                </div>
            </div>
        </div>
    </template>
     
    <script>
        export default {
            name: "Pagenation",
            data() {
                return {
                    jumpPageNum: '',
                    jumpPageNumPlaceholder: '跳转到...'
                }
            },
            props: {
                pagenation: Object,
                // pagenation: {
                //     total: 22,
                //     pageSize: 10,
                //     pageNum: 1,
                // },
     
                pageNumChange: Function,
            },
            computed: {
                displayPage() {
                    let totalPage = this.pagenation.total % this.pagenation.pageSize === 0 ? (parseInt(this.pagenation.total / this.pagenation.pageSize)) : (parseInt(this.pagenation.total / this.pagenation.pageSize) + 1)
                    let pageNum = this.pagenation.pageNum;
                    if (totalPage < 10) {
                        return totalPage;
                    } else {
                        let arr = []
                        if (pageNum < 5) {
                            for (let i = 1; i <= 10; i++) {
                                arr.push(i)
                            }
                        } else if (pageNum >= totalPage - 5) {
                            for (let i = totalPage - 9; i <= totalPage; i++) {
                                arr.push(i)
                            }
                        } else {
                            for (let i = pageNum - 4; i <= pageNum + 5 && i < totalPage; i++) {
                                arr.push(i)
                            }
                        }
                        return arr
                    }
                }
            },
            watch: {
                'pagenation.pageNum'(newValue, oldValue) {
                    console.log(newValue, oldValue)
                    this.pageNumChange(newValue, oldValue)
                },
            },
            methods: {
                pagenationItemActive(i) {
                    if (i == this.pagenation.pageNum) {
                        return 'page-item active'
                    } else {
                        return 'page-item'
                    }
                },
                selectPage(pageNum) {
                    this.pagenation.pageNum = pageNum
                },
                startPage() {
                    if (this.pagenation.pageNum !== 1) {
                        this.pagenation.pageNum = 1
                    }
                },
                endPage() {
                    let totalPage = this.pagenation.total % this.pagenation.pageSize === 0 ? (parseInt(this.pagenation.total / this.pagenation.pageSize)) : (parseInt(this.pagenation.total / this.pagenation.pageSize) + 1)
                    if (this.pagenation.pageNum !== totalPage) {
                        this.pagenation.pageNum = totalPage
                    }
                },
                jumpPageBlur() {
                    this.jumpPageNumPlaceholder = '跳转到...'
                },
                jumpPageClick() {
                    let regex = /^[0-9]+$/;
                    if (regex.test(this.jumpPageNum)) {
                        let jumpPageNum = parseInt(this.jumpPageNum)
                        if (jumpPageNum > 0 && jumpPageNum <= (this.pagenation.total % this.pagenation.pageSize === 0 ? (parseInt(this.pagenation.total / this.pagenation.pageSize)) : (parseInt(this.pagenation.total / this.pagenation.pageSize) + 1))) {
                            this.pagenation.pageNum = jumpPageNum
                        } else {
                            this.jumpPageNumPlaceholder = '超出范围'
                        }
                    } else {
                        this.jumpPageNumPlaceholder = '输入错误'
                    }
                    this.jumpPageNum = '';
                }
            }
        }
    </script>
    <style scoped>
    </style>
    

      

  • 相关阅读:
    (16)JavaScript的流程控制(js的循环)
    (15)javaScript入门
    (14)定位布局(子级在父级中自由定位 父级在页面中自由定位)
    (0-1)CSS 标签语法的属性
    ACM/ICPC 之 双向链表_构造列表-模拟祖玛 (TSH OJ-Zuma(祖玛))
    手记-数学分析(高等数学)中有关算法效率的公式列举(O,Θ,Ω)
    2014北大研究生推免机试(校内)-复杂的整数划分(DP进阶)
    整数划分问题-解法汇总(暂有DP-递归)
    2014北大研究生推免机试(校内)-垃圾炸弹(基础枚举)
    ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
  • 原文地址:https://www.cnblogs.com/helloworld3/p/11192397.html
Copyright © 2011-2022 走看看