Vue练习3:组件开发3(页面切换)

预览

———————————————————————————————————————————

组件文档

Pager组件

 

属性

属性名含义类型必填默认值
current当前页码(总数据量/单页容量)Number1
total总数据量Number0
limit单页容量Number10
visibleNumber可见页码数Number10

事件

事件名含义事件参数参数类型
pageChange($event)页码变化event为当前页码新的页码Number

功能

        首页跳转,单页跳转,末页跳转

        每次必显示可见页码数

        组件第一层未设置样式(pager-container)

———————————————————————————————————————————

注释代码

<template>
    <div class="pager-container" v-if="pageNumber > 1">    //只有页面大于1才显示页码
        <a @click="handleClick(1)" :class="{ disabled: current === 1}">|&lt;&lt;</a>  
        <a @click="handleClick(current - 1)" :class="{ disabled: current === 1}">&lt;&lt;</a>
        <a @click="handleClick(item)" v-for="(item,i) in numbers" :key="i" :class="{ active: item === current }">{{ item }}</a>
        <a @click="handleClick(current + 1)" :class="{ disabled: current === pageNumber }">&gt;&gt;</a>
        <a @click="handleClick(pageNumber)" :class="{ disabled: current === pageNumber }">&gt;&gt;|</a>
    </div>
</template>

<script>
export default {
    props:{        //可传参数
        current:{
            type:Number,
            default: 1,
        },
        total:{
            type:Number,
            default: 0,
        },
        limit:{
            type:Number,
            default: 10,
        },
        visibleNumber:{
            type:Number,
            default: 10,
        },
    },
    computed:{
        pageNumber(){
            return Math.ceil(this.total / this.limit);
        },
        visibleMin(){
            let min = this.current - Math.floor(this.visibleNumber / 2);
            if(min<1){
                min = 1;
            }
            return min;
        },
        visibleMax(){
            let max = this.visibleMin + this.visibleNumber - 1;
            if(max > this.pageNumber){
                max = this.pageNumber;
            }
            return max;
        },
        numbers(){
            let nums = [];
            let numsLength = this.visibleMin;
            if((this.visibleMax - this.visibleMin) < this.visibleNumber - 1){
                numsLength = this.visibleMax - this.visibleNumber + 1;
            }
            for(let i = numsLength; i<= this.visibleMax;i++){
                nums.push(i);
            }
            return nums;
        }
    },
    methods:{
        handleClick(newPage){    //页码处理
            if(newPage < 1){
                newPage = 1;
            }
            else if( newPage > this.pageNumber){
                newPage = this.pageNumber
            }
            this.$emit("pageChange",newPage) //组件向外传递
        }
    }
}
</script>

<style lang="less" scoped>    //样式
@import "~@/styles/var.less";    //引入主题
    .pager-container{
        display: flex;
        justify-content: center;
        margin: 20px 0;
        cursor: pointer;
        a{
            color: @danger;
            margin:0 6px;
            &.disabled {
                color: blue;
                cursor: not-allowed;
            }
            &.active{
                color: green;
                font-weight: bold;
                cursor: text;
            }
        }
    }
</style>

———————————————————————————————————————————

可编译代码

<template>
    <div class="pager-container" v-if="pageNumber > 1">
        <a @click="handleClick(1)" :class="{ disabled: current === 1}">|&lt;&lt;</a>
        <a @click="handleClick(current - 1)" :class="{ disabled: current === 1}">&lt;&lt;</a>
        <a @click="handleClick(item)" v-for="(item,i) in numbers" :key="i" :class="{ active: item === current }">{{ item }}</a>
        <a @click="handleClick(current + 1)" :class="{ disabled: current === pageNumber }">&gt;&gt;</a>
        <a @click="handleClick(pageNumber)" :class="{ disabled: current === pageNumber }">&gt;&gt;|</a>
    </div>
</template>

<script>
export default {
    props:{
        current:{
            type:Number,
            default: 1,
        },
        total:{
            type:Number,
            default: 0,
        },
        limit:{
            type:Number,
            default: 10,
        },
        visibleNumber:{
            type:Number,
            default: 10,
        },
    },
    computed:{
        pageNumber(){
            return Math.ceil(this.total / this.limit);
        },
        visibleMin(){
            let min = this.current - Math.floor(this.visibleNumber / 2);
            if(min<1){
                min = 1;
            }
            return min;
        },
        visibleMax(){
            let max = this.visibleMin + this.visibleNumber - 1;
            if(max > this.pageNumber){
                max = this.pageNumber;
            }
            return max;
        },
        numbers(){
            let nums = [];
            let numsLength = this.visibleMin;
            if((this.visibleMax - this.visibleMin) < this.visibleNumber - 1){
                numsLength = this.visibleMax - this.visibleNumber + 1;
            }
            for(let i = numsLength; i<= this.visibleMax;i++){
                nums.push(i);
            }
            return nums;
        }
    },
    methods:{
        handleClick(newPage){
            if(newPage < 1){
                newPage = 1;
            }
            else if( newPage > this.pageNumber){
                newPage = this.pageNumber
            }
            this.$emit("pageChange",newPage)
        }
    }
}
</script>

<style lang="less" scoped>
@import "~@/styles/var.less";
    .pager-container{
        display: flex;
        justify-content: center;
        margin: 20px 0;
        cursor: pointer;
        a{
            color: @danger;
            margin:0 6px;
            &.disabled {
                color: blue;
                cursor: not-allowed;
            }
            &.active{
                color: green;
                font-weight: bold;
                cursor: text;
            }
        }
    }
</style>

———————————————————————————————————————————

感谢@初琰丶提供的封面

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/391187.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「算法」滑动窗口

前言 算法需要多刷题积累经验&#xff0c;所以我行文重心在于分析解题思路&#xff0c;理论知识部分会相对简略一些 正文 滑动窗口属于双指针&#xff0c;这两个指针是同向前行&#xff0c;它们所夹的区间就称为“窗口” 啥时候用滑动窗口&#xff1f; 题目涉及到“子序列…

AI大模型专题:工业大模型技术应用与发展报告1.0

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;工业大模型技术应用与发展报告1.0》。 &#xff08;报告出品方&#xff1a;中国信通院&#xff09; 报告共计&#xff1a;25页 人工智能的几个相关概念 大模型&#xff1a;即基础模型&#xff…

爱上JVM——常见问题(一):JVM组成

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&…

批量美化图片:轻松打造统一风格的图片库!

在数字时代&#xff0c;图片已经成为我们生活中不可或缺的一部分。从朋友圈的分享到商业广告的展示&#xff0c;每一张图片都承载着我们的情感和创意。但是&#xff0c;你是否曾经因为大量的图片需要美化而感到头疼&#xff1f;是否因为繁琐的手动编辑而失去了创作的热情&#…

钡铼技术的LoRa网关实现智能电网监测与控制

钡铼技术的LoRa网关在智能电网监测与控制方面发挥着关键作用&#xff0c;为电力系统的安全运行和高效管理提供了重要支持。下面将详细介绍钡铼技术的LoRa网关如何实现智能电网监测与控制。 首先&#xff0c;钡铼技术的LoRa网关通过接入各类传感器和监测设备&#xff0c;实现对…

C++11---(1)

目录 一、C11简介 二、列表初始化 2.1、{ } 初始化 三、变量类型推导 3.1、auto 3.2、decltype 为什么需要decltype 四、final和override 4.1、final 4.2、override 五、默认成员函数控制 5.1、default修饰函数 5.2、delete修饰函数 六、nullptr 一、C11简介 C11是…

STM32F1 - 中断优先级

Interrupt Priority 1> STM32F103ZET6异常向量表2> 中断优先级寄存器NVIC_IPRx3> 中断优先级分组4> 例程&#xff1a;设置EXTI4中断优先级5> 例程&#xff1a;设置SysTick中断优先级6> 为什么不能用NVIC_Init()设置Systick优先级&#xff1f;7> 函数NVIC_…

【数据分享】2001~2020年青藏高原植被净初级生产力数据集

各位同学们好&#xff0c;今天和大伙儿分享的是2001~2020年青藏高原植被净初级生产力数据集。如果大家有下载处理数据等方面的问题&#xff0c;您可以私信或评论。 朱军涛. (2022). 青藏高原植被净初级生产力数据集&#xff08;2001-2020&#xff09;. 国家青藏高原数据中心. …

最简单的基于 FFmpeg 的封装格式转换器(无编解码)

最简单的基于 FFmpeg 的封装格式转换器&#xff08;无编解码&#xff09; 最简单的基于 FFmpeg 的封装格式转换器&#xff08;无编解码&#xff09;正文结果工程文件下载 最简单的基于 FFmpeg 的封装格式转换器&#xff08;无编解码&#xff09; 参考雷霄骅博士的文章&#xf…

文件上传漏洞--Upload-labs--Pass03--特殊后缀与::$DATA绕过

方法一&#xff1a;特殊后缀绕过&#xff1a; 一、什么是特殊后缀绕过 源代码中的黑名单禁止一系列后缀名 之外的后缀&#xff0c;称之为‘特殊后缀名’&#xff0c;利用其来绕过黑名单&#xff0c;达到上传含有恶意代码的文件的目的。 二、代码审计 接下来对代码逐条拆解进行…

【精品】关于枚举的高级用法

枚举父接口 public interface BaseEnum {Integer getCode();String getLabel();/*** 根据值获取枚举** param code* param clazz* return*/static <E extends Enum<E> & BaseEnum> E getEnumByCode(Integer code, Class<E> clazz) {Objects.requireNonN…

【点云】生成有凹凸的平面

文章目录 前言高斯函数原理代码保存 测试测试1 &#xff1a;领域曲率代码测试2&#xff1a;高斯曲率代码 加上噪点测试1测试2 总结 前言 尝试用一些数据生成有凹凸面的点云。 我们姑且把z轴当成有凹凸的缺陷&#xff0c;x轴和y轴共同组成一个平面。 高斯函数 原理 高斯函数w…

nba2k23 中国梦之队面补名单

nba2k23 中国梦之队面补名单 提示&#xff1a;本面补为名单形式&#xff0c;内含中国国家队2000、2008、2015、2019面补名单&#xff0c;安装后多队同时存在。 下载地址&#xff1a; https://www.changyouzuhao.cn/12759.html

Python算法题集_验证二叉搜索树

Python算法题集_验证二叉搜索树 题98&#xff1a;验证二叉搜索树1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【DFS递归】2) 改进版一【DFS递归终止检测】3) 改进版二【BFS迭代终止检测】 4. 最优算法 本文为Python算法题集之一的代码示例 题…

【pyopenGL编程手册- 01/20】pyopenGL安装和简要说明

目录 一、说明二、测试系统安装的健康性三、安装64位的openGL四、写给程序员的4. 1 函数库介绍4.2 库内函数的命名 五、常见库的函数介绍5.1 OpenGL 核心库 GL5.2 OpenGL 实用库 GLU5.3 OpenGL 工具库 GLUT5.4 Windows 专用库 WGL 六、错误引发点和异常追踪6.1 错误检查开关6.…

时间序列预测模型:ARIMA模型

1. ARIMA模型原理介绍 ARIMA模型&#xff0c;全称为自回归积分滑动平均模型&#xff08;Autoregressive Integrated Moving Average Model&#xff09;&#xff0c;是一种常用的时间序列预测方法。ARIMA模型通过对时间序列数据的差分化处理&#xff0c;使非平稳时间序列数据变…

CSS之margin塌陷

margin塌陷 CSS中的外边距塌陷&#xff08;Margin Collapse&#xff09;问题是指在垂直方向上&#xff0c;当两个或多个块级元素的边距相遇时&#xff0c;它们之间的距离不是它们各自边距的总和&#xff0c;而是其中的最大值。这种现象主要出现在块级元素的上下外边距之间。 &…

【机器学习笔记】10 人工神经网络

人工神经网络发展史 1943年&#xff0c;心理学家McCulloch和逻辑学家Pitts建立神经网络的数学模型&#xff0c;MP模型 每个神经元都可以抽象为一个圆圈&#xff0c;每个圆圈都附带特定的函数称之为激活函数&#xff0c;每两个神经元之间的连接的大小的加权值即为权重。 1960年…

springboot194基于springboot的医药管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的医药管理系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考。 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **…

【STM32 CubeMX】串口编程DMA

文章目录 前言一、DMA方式1.1 DMA是什么1.2 CubeMX配置DMA1.3 DMA方式函数使用DMA的发送接收函数 总结 前言 在嵌入式系统中&#xff0c;串口通信是一项至关重要的功能&#xff0c;它允许单片机与外部设备进行数据交换&#xff0c;如传感器、显示器或其他设备。然而&#xff0…