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

news2025/3/15 8:11:37

预览

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

组件文档

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>

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

感谢@初琰丶提供的封面

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Aster实现一台电脑当两台使——副屏使用独立win账号

前言&#xff1a;笔者每年回家&#xff0c;都面临着想要和小伙伴一起玩游戏&#xff0c;但小伙伴没有电脑/只有低配电脑的问题。与此同时&#xff0c;笔者自身的电脑是高配置的电脑&#xff0c;因此笔者想到&#xff0c;能否在自己的电脑上运行游戏&#xff0c;在小伙伴的电脑上…

javaweb——socket

定义 Socket&#xff08;套接字&#xff09;是计算机网络编程中的一种抽象&#xff0c;用于在网络上进行通信。它允许计算机之间通过网络进行数据传输。在Java中&#xff0c;Socket类提供了对TCP/IP协议的支持&#xff0c;通过它可以创建客户端和服务端程序&#xff0c;实现网…

Java基于 SpringBoot 的高校校园点餐系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

基于springboot学生考勤管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

数据结构~二叉树(基础知识)

上一篇博客我们对树有了初步了解与学习&#xff0c;这篇我将初步学习二叉树&#xff01;&#xff01;&#xff08;新年快乐&#xff01;&#xff09; 目录 二叉树 1、定义&#xff1a; 2、特点&#xff1a; 3、基本形态&#xff1a; 4、二叉树的种类&#xff1a; &…

javaweb学习day02(CSS)

一、CSS介绍 1 官方文档 CSS 指的是层叠样式表* (Cascading Style Sheets)地址: https://www.w3school.com.cn/css/index.asp离线文档: W3School 离线手册(2017.03.11 版).chm 2 为什么需要 CSS 在没有 CSS 之前&#xff0c;我们想要修改 HTML 元素的样式需要为每个 HTML …

【LeetCode: 429. N 叉树的层序遍历 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

作业帮 x TiDB丨多元化海量数据业务的支撑

导读 作业帮是一家成立于 2015 年的在线教育品牌&#xff0c;致力于用科技手段助力教育普惠。经过近十年的积累&#xff0c;作业帮运用人工智能、大数据等技术&#xff0c;为学生、老师、家长提供学习、教育解决方案&#xff0c;智能硬件产品等。随着公司产品和业务场景越来越…

【Linux】Framebuffer 应用

# 前置知识 LCD 操作原理 在 Linux 系统中通过 Framebuffer 驱动程序来控制 LCD。 Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。 Framebuffer 中保存着一帧图像的每一个像素颜色值&…

使用cockpit安装kvm虚拟机

下载管理虚拟机的插件 如果安装完成之后&#xff0c;出现报错&#xff0c;则刷新。如下图所示 添加虚拟网桥 进入添加网桥之后&#xff0c;名称自己修改&#xff0c;端口设置为自己的网卡名称。 之后返回xshell之后再次查看ip地址就会出现 添加镜像到物理机的根目录下 将系统…

MATLAB离线文档安装

MATLAB离线文档安装 来源于最全matlab安装离线文档教程只是对内容进行了精简&#xff0c;同时更方便查找 一、下载离线文档 我上传的2023b离线文档 提供本体属于违规行为&#xff0c;本体下载链接已删除 为方便已安装好软件的朋友想安装离线帮助文档&#xff0c;由于官网下载…

【数据结构】18 二叉搜索树(查找,插入,删除)

定义 二叉搜索树也叫二叉排序树或者二叉查找树。它是一种对排序和查找都很有用的特殊二叉树。 一个二叉搜索树可以为空&#xff0c;如果它不为空&#xff0c;它将满足以下性质&#xff1a; 非空左子树的所有键值小于其根节点的键值非空右子树的所有键值都大于其根结点的键值左…

循环、数组、match

for循环 循环&#xff1a;周而复始 For&#xff08;临时变量&#xff1b;循环条件&#xff1b;腰间变更&#xff09;{ 循环体 } For循环可以嵌套 while循环 声明变量 While&#xff08;条件&#xff09;{ 循环体 变量的变化} do while循环 do{ 执行语句&#xff1b; …

五、ActiveMQ的Broker(嵌入到java程序)

ActiveMQ的Broker 一、是什么二、Java应用嵌入ActiveMQ1.pom.xml2.borker实现3.生产者4.消费者 一、是什么 Broker相当于一个ActiveMQ服务器实例实现了用代码的形式启动ActiveMQ将MQ嵌入到Java代码中&#xff0c;以便随时用随时启动&#xff0c;在用的时候再去启动这样能节省了…

【前端工程化面试题】如何优化提高 webpack 的构建速度

使用最新版本的 Webpack 和相关插件: 每个新版本的 Webpack 都会带来性能方面的改进和优化&#xff0c;因此始终确保你在使用最新版本。同时&#xff0c;更新你的相关插件也是同样重要的。 使用DllPlugin动态链接库: 使用DllPlugin和DllReferencePlugin来将第三方库的代码进行…

L2-021 点赞狂魔

一、题目 二、解题思路 统计每个人点赞的不同标签的数量&#xff1a;每行列出一位用户的点赞标签&#xff0c;这些标签可能有重复的&#xff0c;所以将用户的点赞标签存放在 set 里&#xff0c;通过 size() 函数获得点赞的不同标签的数量&#xff1b;结构体包括用户的信息&…

如何打开Windows 10及更低版本系统的控制面板?这里提供详细步骤

Windows中的控制面板是一组小程序,有点像小程序,可以用来配置操作系统的各个方面。 例如,“控制面板”中的一个小程序允许你配置鼠标指针的大小(以及其他内容),而另一个则允许你调整所有与声音相关的设置。 其他小程序可用于更改网络设置、设置存储空间、管理显示设置等…

TIM编码器接口(编码器测速)

定时器编码器接口自动计次--------->对应手册14.3.12编码器接口模式 应用场景&#xff1a; 电机控制PWM驱动电机&#xff0c;编码器测电机速度&#xff0c;PID算法闭环控制 ------------------------------------------------------------------------------------------…

lv15 I2C背景知识(裸机I2C、linux对I2C支持、MPU6050)4

一、I2C总线背景知识 SOC芯片平台的外设分为&#xff1a; 一级外设&#xff1a;外设控制器集成在SOC芯片内部 二级外设&#xff1a;外设控制器由另一块芯片负责&#xff0c;通过一些通讯总线与SOC芯片相连 Inter-Integrated Circuit&#xff1a; 字面意思是用于“集成电路之…

在面试中,如何回复擅长 Vue 还是 React

目录 一、Vue.JS 二、React 三、Vue和React的区别 四、前端开发框架 一、Vue.JS Vue.js&#xff08;通常简称为Vue&#xff09;是一个用于构建用户界面的开源JavaScript框架。它采用了MVVM&#xff08;Model-View-ViewModel&#xff09;的架构模式&#xff0c;通过数据驱动…