您的当前位置:首页>全部文章>文章详情

【Vue】Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)

CrazyPanda发表于:2023-12-10 20:08:41浏览:234次TAG:

【转】https://blog.csdn.net/weixin_53231455/article/details/133936824



1.png

📋前情回顾&前言

上一篇文章(Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(上)),我们主要介绍了打印插件 Print.js 的使用,包括介绍、了解到快速上手的过程,以及 Vue3 + Nodejs + Print.js 的实战练习,通过简单的例子复刻出实战中的应用场景和业务需求。其实之所以会有下篇的内容,是因为这个 Vue3 实战项目的前端用了 Element-Plus 这个 UI 框架,其中包括有表格、分页,在博主的文章(axios 实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联系人列表管理后台)中就已经开始用这套模板了,今天在此基础上和 Vue3 实战项目的延申上,我们来讲一下关于 el-table 与 el-pagination 的深入使用。


🎯关于 el-table

接下来关于 el-table 和 el-pagination 内容介绍,我们根据官方文档和模板项目的代码来分享使用的案例。首先我们来看看 el-table 的一些基础使用。然后我们启动项目,运行 Vue 项目,启动 Nodejs 服务。我们先看项目运行的效果图,还是以这个模板项目(上述文章链接的旧项目,可到文章页下载项目)为参考。
1.png
上图红框的部分是这个模板项目的表格部分,这里的表格是很基本的 el-table 和 el-table-column 组成的,我们可以通过一个代码片段,来进行分析,如下图。
1.png根据效果图和代码片段,我们可以看到 el-table,有三个属性,分别对应的是表格的数据内容、表格为空时显示的内容以及表格的斑马纹(就是奇数或偶数行显示不一样的背景颜色)。不仅如此,关于 el-table 还要很多其他的属性,这里就不一样介绍了 ,具体的内容可以到 Element-plus 官网查询配合使用。

🧩项目中延申使用

我们简单了解本篇文章介绍的模板项目之后,我们来看看实际项目中,引用此模板后,在原有基础上添加的关于 el-table 的内容。首先是获取每行内容数据的方法,然后是对每行内容做判断处理,最后是对表格内容的搜索(含变式),接下来我们来逐个介绍和分享给大家。

1️⃣获取每行对应的内容数据

这个功能的应用是在打印模块的打印按钮,做数据测试的时候使用到的,因为涉及到使用该打印单的 id 、PDF 路径等等参数进行传参,所以我们要确保每行都可以获取到其对应的 id 等等参数。因此,一开始通过 el-table 的事件 row-click 来获取每行的全部数据,包括没有展示的数据,其中 PDF 的路径是当然不会展示到表格的数据。

这里我们可以做一个测试,比如说现在项目中表格展示的内容包括有 id、姓名、电话(如下图),如果我们通过 row-click 事件来获取行信息的话,没有意外就这三条参数是会获取到的,如果说在 JSON 数据中加上一条不显示在表格的数据,我们可以通过 row-click 事件获取一下。
1.png
接下来,在代码中加入 row-click 事件,以及在 Nodejs 服务的 JSON 加上一个hide 参数。
1.png
1.png
然后我们在页面,点击一下这个事件(点击每一行的任意位置即可),然后查看控制台输出的内容。
1.png
通过输出内容我们可以发现 row-click 确实获取到了未显示在表格的数据,我们可以对比看第二条输出的 undefined ,是因为我们只在第一条数据里面添加了 hide 参数,所以点击第二行输出的内容是没有 hide 参数的,因此返回 undefined。

总的来说,我们可以通过这个方法来获取到表格中未显示的内容,比如说本次实战项目中提及到的 PDF 路径,虽然表格渲染的数据是根据表头列的标题而显示,有些内容接口中是返回的了,但是并不需要显示。

❗补充:
假设我们是在表格的操作按钮,获取到 PDF 路径,以及作为参数传入接口,这个时候,不能采取 row-click 的事件来获取。因为 row-click 的可点击范围是一整行,假设我们在操作栏的按钮再次调用了 row-click 绑定的函数,这样点击操作栏的按钮就会调用两次 row-click 事件了。

因此,我们可以通过表格的 row 来获取到表格中没有展示的数据,不同在于不用通过点击来获取,而是作为参数传入对应的函数中进行使用。1.png
我们可以看到上图的代码片段,接下来我们可以点击编辑按钮,然后查看控制台返回的 row 数据。
1.png
我们可以看到控制台一样返回了我们想要的数据,因此我们也可以通过这种方法获取我们需要到数据。

2️⃣行内数据判断处理(过滤)

在表格的数据中,可能会存在 null、undefined 等等非正确的值,这个时候我们并不想在表格中显示出来,这个时候我们可以对数据进行处理(过滤)。除此之外,假如我们获取到的值是一个状态(type、status等等),而不是目标值,我们也可以对这个状态进行判断,从而显示对应的参数,比如说 0 否 1 是。接下来我们一起来看下实际例子。

比如说,我们把联系人列表的第一条数据处理一下,把手机号码清空,然后展示暂无手机号码的字样,如下图。
1.png
1.png
如果是处理对应的状态,也是同样的操作。还有补充一点就是,关于列表序号的问题,有些时候我们的 id 或者序号是根据列表的排序而定,而不是后端返回的序号,虽然我这个模板项目的 id 是根据后台返回来决定排序的。因此可以用 index 来处理排序的问题,如下图的代码所示,还有一点要注意的是 index 要 +1,因为 index 是从 0 开始的。
1.png

3️⃣对表格内容的索引

在这个实战项目中,我们还有一个需求就是针对表格内容进行搜索,搜索到的数据就展示到表格中,但是对于搜索框这种需求,我们通过两种例子来分享一下。第一种是调用接口搜索返回,传入对于的 keywords 和 参数,调用接口,相当于传不一样的参数然后再请求一次接口;第二种是自己写一个搜索逻辑(如 filter)来实现对表格内容的搜索。接下来我们主要讲一下第二种方式,关于第一种还有的补充就是,这种情况的前提是表格默认没数据,然后要通过搜索才展示对应返回的数据,因此这里的表格只是起到一个分类、分页、可读性强的效果,方便数据的查找。

接下来重点讲一下第二种方式,我们通过以下简单的案例(官网案例)来展示出效果,下面是完整代码和一些效果图。

<template>
  <el-table :data="filterTableData" style="width: 100%">
    <el-table-column label="Date" prop="date" />
    <el-table-column label="Name" prop="name" />
    <el-table-column align="right">
      <template #header>
        <el-input v-model="search" size="small" placeholder="Type to search" />
      </template>
      <template #default="scope">
        <el-button size="small" @click="handleEdit(scope.$index, scope.row)"
          >Edit</el-button
        >
        <el-button
          size="small"
          type="danger"
          @click="handleDelete(scope.$index, scope.row)"
          >Delete</el-button
        >
      </template>
    </el-table-column>
  </el-table>
</template>

<script setup>
import { computed, ref } from "vue";

const search = ref("");
const filterTableData = computed(() =>
  tableData.filter(
    (data) =>
      !search.value ||
      data.name.toLowerCase().includes(search.value.toLowerCase())
  )
);
const handleEdit = (index, row) => {
  console.log(index, row);
};
const handleDelete = (index, row) => {
  console.log(index, row);
};

const tableData = [
  {
    date: "2016-05-03",
    name: "Tom",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    date: "2016-05-02",
    name: "John",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    date: "2016-05-04",
    name: "Morgan",
    address: "No. 189, Grove St, Los Angeles",
  },
  {
    date: "2016-05-01",
    name: "Jessy",
    address: "No. 189, Grove St, Los Angeles",
  },
];
</script>

1.png
注意我们可以看到代码中的 fliter 过滤的是 data.name ,意思就是说我们在搜索框输入的搜索内容只能是表格的名字,比如说我们在输入框中输入 J 这个字母,表格就会搜索出两条含有 J 字母的名字数据,如下图。
1.png
核心代码

const search = ref("");
const filterTableData = computed(() =>
  tableData.filter(
    (data) =>
      !search.value ||
      data.name.toLowerCase().includes(search.value.toLowerCase())
  )
);

这段代码实现了一个基本的前端搜索过滤功能,可以根据用户输入的关键词对表格数据进行筛选,并返回匹配的数据。具体实现方法是通过 Vue3 中的 Composition API ,定义了一个响应式变量 search 来保存用户输入的搜索关键词,然后使用计算属性 filterTableData 来根据 search 和 tableData 的值来计算出过滤后的数据。在计算属性中,通过调用 toLowerCase() 方法将表格数据中的每条记录转换为小写字母,并使用 includes() 方法来判断是否包含搜索关键词。如果包含,则返回 true,否则返回 false。最终,通过 !search.value ||
data.name.toLowerCase().includes(search.value.toLowerCase())
的 方式来判断是否需要进行过滤,如果 search.value 为空字符串,则直接返回所有数据,否则再进行过滤。


🎯关于 el-pagination

说到表格,当然少不了配套使用的分页功能,在实战项目中,二者也是形影不离的出现使用,有表格的地方,一定会出现分页功能的。因为表格的数据不可能一下子展示上千条数据,这样子可读性很差,也不方数据查找。接下来我们先简单了解一下 el-pagination。

Element Plus 的 Pagination 组件用于在页面上展示分页器,帮助用户浏览大量数据时进行分页操作。它提供了一系列的交互和样式配置选项,可以方便地满足不同需求。

Pagination 组件的主要功能如下:

  • 显示当前页码和总页数:Pagination 组件会根据传入的总记录数和每页显示的记录数自动计算出总页数,并显示当前页码和总页数信息。

  • 支持自定义每页显示的记录数:用户可以选择每页显示的记录数,通过下拉菜单来切换每页显示的数量。

  • 支持自定义布局:Pagination 组件提供了多种布局方式,可以根据需要选择合适的布局方式,如常见的「总记录数在左侧,分页器在右侧」或者「总记录数在右侧,分页器在左侧」等。

  • 支持跳转到指定页码:用户可以手动输入页码并跳转到指定的页码,方便快速定位到特定页。

  • 支持前后翻页和首页尾页:Pagination 组件提供了按钮来进行前后翻页操作,以及快速跳转到首页和尾页。

  • 提供事件回调:Pagination 组件提供了多个事件回调函数,如页码改变、每页显示数量改变等,可以通过这些回调函数来处理分页操作的逻辑。

🧩项目中延申使用

在实际开发中,在单页应用的表格中,我们在使用分页功能时,除了有基本的页码,可能还会有跳转页数、分页展示的需求,尤其是数据量大的表格。所以接下来,我来分享一下一些在实际开发中用到过的一些分页需求。

1️⃣显示总条数与分页展示

这个功能还是很实用的,显示表格内容的总条数,然后配合分页展示表格的条数,比如说一页展示 10 条数据。我们可以看案例模板是没有加上这两个功能,只有简单的页码,接下来在案例模板加上这两个功能。
1.png
1.png
接下来我们在代码中加上这些功能,如下图。1.png
我们可以看到表格中一共有八条数据,默认是展示五条,选择每页展示十条后,则全部展示出来了。接下来我们来看看代码。

    <el-pagination
            v-model:current-page="currentPage"
            :page-size="5"
            layout="total, prev, pager, next, sizes"
            :total="contactList.list.length"
            @current-change="handleCurrentChange"
            :page-sizes="[10,20,30,40,50,60]"
            @size-change="handleSizeChange"
></el-pagination>

1.png
其中展示出总数和分页的部分是 layout 中添加,加上 total 和 sizes 即可。

2️⃣跳转页和页码样式

接下来还可以对页码部分再进行处理一下,添加一个跳转对应页面的功能,以及页码的样式,如下图。
1.png
1.png
然后我们在刚刚的模板项目加上这些功能,如下图。
1.png
代码方面也很简单,只用在 layout 中加上 jumper ,还有在 el-pagination 中加上 background 即可。

 <el-pagination
            v-model:current-page="currentPage"
            :page-size="5"
            layout="total, prev, pager, next, sizes, jumper"
            :total="contactList.list.length"
            @current-change="handleCurrentChange"
            :page-sizes="[10, 20, 30, 40, 50, 60]"
            @size-change="handleSizeChange"
            background
></el-pagination>

3️⃣设置为中文

上面添加的一系列内容,我们可以发现都是英文的,如果需求上要求是中文的分页展示或中文内容,所以我们可以把该插件设置为中文语言的格式,具体操作是在项目中的 App.vue 文件下,添加如下的代码即可。

<template>
  <!-- <router-view /> -->
  <!-- Element plus设置中文语言方法 -->
  <el-config-provider :locale="zhCn">
    <router-view />
  </el-config-provider>
</template>
<script setup>
import { ElConfigProvider } from "element-plus";
import zhCn from "element-plus/lib/locale/lang/zh-cn";
</script>
<style></style>

1.png
如上图,我们可以看到,分页部分的内容已经设置为中文了。


猜你喜欢

【Vue】vue中destroy应用于什么场景
vue 中 destroy 方法用于销毁 vue 实例,释放其资源,应用场景有:组件销毁;页面路由切换;手动释放资源;避免内存泄漏。Vue 中 destroy 的应用场景Vue 中的 destroy 方法用于销毁一个 Vue 实例,释放其占用的资源。以下是一些常见的 destroy 应用场景:1. 组件销毁当一个组件不再需要时,可以使用 destroy 方法将其销毁,例如:this.$destroy();登录后复制2. 页面路由切换当页面路由切换时,旧的 Vue 实例需要被销毁,以释放其资源。可
发表于:2024-05-16 浏览:249 TAG:
【Vue】vue通过class获取dom
其实就是操作 html 中的标签的一些能力  我们可以操作哪些内容  获取一个元素  移除一个元素  创建一个元素  向页面里面添加一个元素  给元素绑定一些事件  获取元素的属性给元素添加一些 css 样式  ...  DOM 的核心对象就是 docuemnt 对象  document 对象是浏览器内置的一个对象,里面存储着专门用来操作元素的各种方法  DOM: 页面中的标签,我们通过 js 获取到以后,就把这个对象叫做 DOM 对象获取一个元素通过 js 代码来获取页面中的标签获取到以后我们
发表于:2024-05-12 浏览:289 TAG:
【Vue】Antd Pro Vue的使用(十) —— a-form表单赋值
在Ant Design Pro Vue中,为表单赋值通常涉及到两个方面:一是使用v-model进行双向绑定,二是直接通过this.form.setFieldsValue()方法设置表单字段的值。以下是一个简单的例子,展示如何为Ant Design Pro Vue中的表单赋值:首先,确保你已经在组件中引入了a-form-model和相关的表单字段组件比如a-form-model-item和a-input。在data函数中定义一个form对象,它包含了你想要绑定的表单字段。使用v-model指令将输
发表于:2024-05-10 浏览:301 TAG:
【Vue】vue使用后端提供的接口
在 vue 中使用后端接口可通过以下步骤实现:安装 axios 库并导入。使用 axios 对象创建 http 请求,如 get 或 post。使用 data 选项传递数据。处理响应,使用 data 属性访问后端返回的数据。使用 vuex 管理从后端获取的数据,通过组件访问。在 Vue 中使用后端接口在 Vue.js 应用中使用后端提供的接口可以让你与服务器通信,获取和更新数据。本文将介绍如何在 Vue 中使用后端接口。1. 安装 Axios首先,你需要安装 Axios 库,这是一个用于发起 H
发表于:2024-04-18 浏览:292 TAG:
【Vue】Antd Pro Vue的使用(八) —— 表单组件的常用配置
1、清除配置allow-clear在ant design react组件中,表单组件默认都有清除按钮(输入框右侧的小黑叉号),在vue组件中需要自己配置,即给组件加上allow-clear属性并且所有组件都支持这个属性,a-input、a-select、a-textarea、a-date-picker等都支持&lt;a-form-item&nbsp;label=&quot;用户名&quot;&gt; &nbsp;&nbsp;&nbsp;&nbsp;&lt;a-input&nbsp; &nbsp;
发表于:2024-05-10 浏览:279 TAG:
【Vue】Antd Pro Vue的使用(一)—— 安装及运行
前言Ant Design Pro 是一个企业级中后台前端/设计解决方案,致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。AntDesignVue与react版本有几乎相同的布局AntDesignPro React版本:开箱即用的中台前端/设计解决方案 - Ant Design ProAntDesign组件:Ant Design - 一套企业级 UI 设计语言和 React 组件库Ant
发表于:2024-04-20 浏览:298 TAG:
【Vue】Vue中使用Vuex管理全局状态详解和示例
vue.js是一种流行的前端框架,它提供了很多方便的功能,但当应用变得越来越复杂时,我们很快就会发现向子组件传递大量数据变得非常困难。这就是为什么vuex在vue中变得如此重要的原因。vuex是一个全局状态管理器,使得数据和状态的共享变得更容易。在本文中,我们将深入了解vuex的工作原理并演示如何将其集成到您的vue应用程序中。什么是VuexVuex是一个用于Vue.js应用程序的状态管理模式和库,常用于解决跨层级、多组件、多页面共享状态问题。它将应用程序的状态集中存储到一个单一的store中,
发表于:2024-04-29 浏览:310 TAG:
【Vue】vue创建应用并运行
简介Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。Vue 是一个框架,也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的,不同的开发者在 Web 上构建的东西可能在形式和规模上会有很大的不同。考虑到这一点,Vue 的设计非常注重灵活性和
发表于:2024-04-23 浏览:366 TAG:
【Vue】Antd Pro Vue的使用(七) —— 年份选择组件配置
ant design vue组件中没有现成的年份组件可使用,不过可通过配置来实现年份选择。先看实现效果:关闭效果:展开效果:配置如下:&lt;a-date-picker &nbsp;&nbsp;&nbsp;&nbsp;mode=&quot;year&quot; &nbsp;&nbsp;&nbsp;&nbsp;format=&quot;YYYY&quot; &nbsp;&nbsp;&nbsp;&nbsp;:style=&quot;{width:&nbsp;&#39;256px&#39;}&amp;quot
发表于:2024-05-09 浏览:278 TAG:
【Vue】Vue中如何使用v-for指令循环输出对象
在vue中,v-for是一种指令,在模板中使用它可以对数组或对象进行循环操作。v-for指令用于循环渲染数据,它是vue中非常有用的指令之一。在vue中,使用v-for指令循环输出对象的方式和循环输出数组的方式类似,只需要稍作区别即可。如何使用v-for指令循环输出对象呢?下面我们将分以下几个部分进行讲解。一、v-for指令的基本使用v-for指令的基本语法如下:&lt;div&nbsp;v-for=&quot;(item,index)&nbsp;in&nbsp;items&quot;&gt;{
发表于:2024-04-30 浏览:370 TAG: