vue3中setup语法糖下通用的分页插件实例详解

目录
  • vue3中setup语法糖下父子组件之间的通信
    • 准备工作
    • 父传子:
    • 子传父:

先给大家介绍下vue3中setup语法糖下通用的分页插件,内容如下所示:

效果

自定义分页插件:PagePlugin.vue

<script setup lang="ts">
// total :用来传递数据总条数
// pageSize :每页展示几条数据
// currentPage :当前默认页码
// change-page :页码改变时触发的事件,参数为当前页码

const props = defineProps({
  //数据总条数
  total: {
    type: Number,
    default: 88
  },
  //页面大小
  pageSize: {
    type: Number,
    default: 16
  },
  //当前显示的页码
  currentPage: {
    type: Number,
    default: 1
  }
});

let currentNum = ref(props.currentPage);

import {computed, ref} from 'vue'

// 页码显示组合
// 计算总页数
const pages = computed(() => Math.ceil(props.total / props.pageSize ));

const list = computed(() => {
  const result = []
  // 总页数小于等于5页的时候
  if (pages.value <= 5) {
    for (let i = 1; i <= pages.value; i++) {
      result.push(i)
    }
  } else {
    // 总页数大于5页的时候
    // 控制两端的省略号的有无,页码的显示个数与选中页码居中
    if (currentNum.value <= 2) {
      for (let i = 1; i <= 5; i++) {
        result.push(i)
      }
    } else if (currentNum.value >= 3 && currentNum.value <= pages.value - 2) {
      for (let i = currentNum.value - 2; i <= currentNum.value + 2; i++) {
        result.push(i)
      }
    } else if (currentNum.value > pages.value - 2) {
      for (let i = pages.value - 4; i <= pages.value; i++) {
        result.push(i)
      }
    }
  }
  return result;
})

const emit = defineEmits(["changePage"])
function changePage(type) {
  // 点击上一页按钮
  if (type === false) {
    if (currentNum.value <= 1)
      return
    currentNum.value -= 1
  } else if (type === true) {
    // 点击下一页按钮
    if (currentNum.value >= pages.value)
      return
    currentNum.value += 1
  } else {
    // 点击页码
    currentNum.value = type
  }
  emit('changePage',currentNum.value);
}
</script>

<template>
  <div class="my-pagination">
    <a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  :class="{ disabled: currentNum === 1 }" @click="changePage(false)">上一页</a>
    <span v-if="currentNum > 3">...</span>
    <a
        href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"
        v-for="item in list"
        :key="item"
        :class="{ active: currentNum === item }"
        @click="changePage(item)"
    >{{ item }}</a>
    <span v-if="currentNum < pages - 2">...</span>
    <a href="javascript:;" rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  :class="{ disabled: currentNum === pages }" @click="changePage(true)">下一页</a>
  </div>
</template>

<style scoped lang="less">
.my-pagination {
  display: flex;
  justify-content: center;
  padding: 30px;

  > a {
    display: inline-block;
    padding: 5px 10px;
    border: 1px solid #e4e4e4;
    border-radius: 4px;
    margin-right: 10px;

    &:hover {
      color: #27BA9B;
    }

    &.active {
      background: #27BA9B;
      color: #fff;
      border-color: #27BA9B;
    }

    &.disabled {
      cursor: not-allowed;
      opacity: 0.4;

      &:hover {
        color: #333;
      }
    }
  }

  > span {
    margin-right: 10px;
  }
}
</style>

使用插件

<script setup lang="ts">
import PagePlugin from "@/components/PagePlugin.vue";

function changePage(currentPage){
  // alert(currentPage)
  console.log(currentPage)
}
</script>

<template>
  <!--分页-->
  <PagePlugin
      :total="total"
      :pagesize="pageSize"
      :currentPage="pageNum"
      @change-page="changePage"/>
</template>

vue3中setup语法糖下父子组件之间的通信

准备工作

在router文件夹中创建index.ts文件:

import {createRouter, createWebHashHistory} from 'vue-router'
import Father from '../views/Father.vue'

const routes = [
    {
        path: '/',
        name: "Father",
        component: Father
    },
    {
        path: '/Son',
        name: 'Son',
        component: () => import('../views/Son.vue')
    }
]
const router = createRouter({
    history: createWebHashHistory(),
    routes
})
export default router

父传子:

第一步:Father.vue

<template>
  <h2>父组件</h2>
  <hr>
  <Son :num="num" :arr="array" ></Son>
</template>

<script lang="ts" setup>
import {ref} from 'vue'
import Son from "./Son.vue";

let num = ref(6688)
let array = ref([11, 22, 33, 44])
</script>

第二步:Sun.vue

<template>
  <h2>子组件</h2>
  {{props.num}}--{{props.arr}}
</template>

<script lang="ts" setup>
let props = defineProps({
  num: Number,
  arr: {
    type: Array,
    default: () => [1, 2, 3, 4]
  }
})
</script>

子传父:

第一步:Sun.vue

<template>
  <h2>子组件</h2>
  <button @click="sendMsg">向父组件传递数据</button>
</template>

<script lang="ts" setup>
import {ref} from 'vue'

const emit = defineEmits(["son_sendMsg"]);
const msg = ref("子组件传递给父组件的数据")

function sendMsg() {
  emit("son_sendMsg", msg.value)
}
</script>

第二步:Father.vue:

<template>
  <h2>父组件</h2>
  {{ message }}
  <hr>
  <Son @son_sendMsg="fun"></Son>
</template>

<script lang="ts" setup>
import {ref} from 'vue'
import Son from "./Son.vue"

let message = ref("")
function fun(msg) {
  message.value = msg
}
</script>

到此这篇关于vue3中setup语法糖下通用的分页插件的文章就介绍到这了,更多相关vue3分页插件内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue中的自定义分页插件组件的示例

    介绍一下,已经有很多的vue分页的组件了,大家都是大同小易,那么我就结合自身的使用,写出了一片文章 首先在新建一个分页模块 在模块中引入相应的代码,(内有详细的注释) template中 <div class="page-bar"> <ul> <li class="first"> <span>共{{dataNum}}条记录 第 {{cur}} / {{all}} 页</span> </li> &

  • Vue3 $emit用法指南(含选项API、组合API及 setup 语法糖)

    目录 Vue Emit是如何工作的? 选项API - this.$emit 带有setup()的组合API - context.emit 在 <script setup> 中的用法 最佳实践 使用 emits 定义自定义事件 正确的事件命令 许多Vue模式涉及使用props将数据从父组件传递到子组件.但如果我们需要一个子组件将数据传给它的父组件呢? 使用 emit,我们可以触发事件并将数据传递到组件的层次结构中.这对下面几种情况很有用,如: 从 input 中发出数据 从 modal 本身内部

  • 强烈推荐!Vue3.2中的setup语法糖

    目录 前文 1.什么是setup语法糖 2.使用setup组件自动注册 3.使用setup后新增API 3.1 defineProps 3.2 defineEmits 3.3 defineExpose vue3项目如何开启setup语法糖 总结: 前文 作为一个前端程序员,说起 Vue 3肯定不会陌生,作为时下最火的前端框架之一,很多人将它作为入门框架. 但是尽管 Vue 3很久之前就已经开始投入使用,也不免会有人抱怨 Vue 3的知识点太多太杂,更新太快.这不,最近 Vue 3又定稿了一项新技

  • 详解如何在Vue3使用<script lang=“ts“ setup>语法糖

    目录 迁移组件 隐式返回 defineProps defineEmits 默认关闭和defineExpose Vue 3.2 引入了语法,这是一种稍微不那么冗长的声明组件的方式.您可以通过向 SFC 的元素添加属性来启用它,然后可以删除组件中的一些样板.script setupsetupscript 让我们举一个实际的例子,并将其迁移到这个语法! 迁移组件 以下组件有两个道具(要显示的和一个标志).基于这两个道具,计算模板中显示的小马图像的URL(通过另一个组件).该组件还会在用户单击它时发出一

  • Vue分页插件的前后端配置与使用

    本文实例为大家分享了Vue分页插件的前后端配置与使用,供大家参考,具体内容如下 分页插件的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.10</version> </dependency> <dependency> <groupI

  • 一文搞懂Vue3.2中setup语法糖使用

    目录 前言 一.如何使用setup语法糖 二.data数据的使用 三.method方法的使用 四.watchEffect的使用 五.watch的使用 六.computed计算属性的使用 七.props父子传值的使用 八.emit子父传值的使用 九.获取子组件ref变量和defineExpose暴露 十.路由useRoute和useRouter的使用 十一.store仓库的使用 十二.await 的支持 十三.provide 和 inject 祖孙传值 前言 提示:Vue3.2 版本开始才能使用语

  • vue分页插件的使用方法

    本文实例为大家分享了vue分页插件的具体代码,供大家参考,具体内容如下 分页插件代码: <div> <div class="page"> <div class="pagelist"> <span class="jump" :class="{disabled:pstart}" @click="lessPage()">上一页</span> <sp

  • vue3中setup语法糖下通用的分页插件实例详解

    目录 vue3中setup语法糖下父子组件之间的通信 准备工作 父传子: 子传父: 先给大家介绍下vue3中setup语法糖下通用的分页插件,内容如下所示: 效果 自定义分页插件:PagePlugin.vue <script setup lang="ts"> // total :用来传递数据总条数 // pageSize :每页展示几条数据 // currentPage :当前默认页码 // change-page :页码改变时触发的事件,参数为当前页码 const pro

  • Vue3.2 setup语法糖及Hook函数基本使用

    目录 引言 setup(语法糖) 1.基本使用 2.自动注册 3.组件通信 defineEmit ----> [子组件向父组件事件传递] 代码示列: defineExpose ----> [组件暴露出自己的属性] 代码示列: hook函数 介绍: 示列 : 引言 在2021 年 8 月 5 日,Vue发布了3.2版本的新写法,其中最主要的亮点就在于setup的语法糖,学过Vue3.0的小伙伴都清楚,当我们在使用Vue3的语法就构建组件的时候,总是需要把外面定义的方法变量必须要return出去,

  • vue3 使用setup语法糖实现分类管理功能

    目录 setup语法糖简介 setup语法糖中新增的api 模块简介 分类模块路由 分类列表组件 获取分类列表数据 分类表单组件 setup语法糖简介 直接在 script 标签中添加 setup 属性就可以直接使用 setup 语法糖了. 使用 setup 语法糖后,不用写 setup 函数,组件只需要引入不需要注册,属性和方法也不需要再返回,可以直接在 template 模板中使用. setup语法糖中新增的api defineProps:子组件接收父组件中传来的 props defineE

  • vue中setup语法糖写法实例

    目录 变量声明 父传子 子传父 变量声明 变量声明定义的时候,不需要返回可以直接使用即可 没有使用setup语法糖时写法 <script> import {useStore} from 'vuex' export default { setup() { const store=useStore() const plus=()=>{ store.commit('plus') } return {plus} }, } </script> 使用setup语法糖写法 <scri

  • Java 中的vector和list的区别和使用实例详解

    要了解vector,list,deque.我们先来了解一下STL. STL是Standard Template Library的简称,中文名是标准模板库.从根本上说,STL是一些容器和算法的集合.STL可分为容器(containers).迭代器(iterators).空间配置器(allocator).配接器(adapters).算法(algorithms).仿函数(functors)六个部分.指针被封装成迭代器,这里vector,list就是所谓的容器. 我们常常在实现链表,栈,队列或者数组时,

  • java 中模拟UDP传输的发送端和接收端实例详解

    java 中模拟UDP传输的发送端和接收端实例详解 一.创建UDP传输的发送端 1.建立UDP的Socket服务: 2.将要发送的数据封装到数据包中: 3.通过UDP的Socket服务将数据包发送出去: 4.关闭Socket服务. import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class

  • js中获取URL参数的共用方法getRequest()方法实例详解

    下面通过一段代码给大家介绍js中获取URL参数的共用方法getRequest()方法,具体代码如下所示: getRequest : function() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&am

  • laravel下trait的使用代码实例详解

    前言 今天在整理laravel的练习项目时,发现自己的代码结构中有很多重复的代码.于是搜索了一下laravel框架的代码复用机制.知道了Trait的存在,于是学习使用了一下. 关于Trait的理解 Trait是PHP5.4引入的新概念,定义方式和class的定义方式类似.但是并不具备class的完整性.Trait看上去更像是一个class的一部分.它使不相关的两个class能够具有类似的行为. Trait的简单使用 新建一个Trait 本人由于数据库操作上使用了eloquent模型,在多表查询时

  • BootStrap中Table分页插件使用详解

    分页(Pagination),是一种无序列表,Bootstrap 像处理其他界面元素一样处理分页. bootstrap-table介绍 bootstrap-table 是一个轻量级的table插件,使用AJAX获取JSON格式的数据,其分页和数据填充很方便,支持国际化. 下载地址 https://github.com/wenzhixin/bootstrap-table/archive/1.11.0.zip 使用方式 引入css和js <!--css样式--> <link href=&qu

随机推荐