在现代 Web 应用中,提供一个方便用户返回页面顶部的功能是非常重要的。Ant Design Vue 提供了 BackTop 组件,可以轻松实现这一功能。本文将详细介绍如何在 Nuxt 3 项目中使用 <a-back-top/> 组件,并通过按需引入的方式加载组件及其样式,以避免引入不必要的文件,减小打包体积,提高性能。

安装 Ant Design Vue

首先,我们需要在项目中安装 Ant Design Vue。你可以使用 npm 或 yarn 进行安装。

使用 npm:

npm install ant-design-vue

使用 yarn:

yarn add ant-design-vue
安装 vite-plugin-style-import 插件

为了按需引入 Ant Design Vue 的组件及其样式,我们需要安装 vite-plugin-style-import 插件。

使用 npm:

npm install vite-plugin-style-import -D

使用 yarn:

yarn add vite-plugin-style-import -D
配置 nuxt.config.ts

在 nuxt.config.ts 文件中配置 vite-plugin-style-import 和 unplugin-vue-components 插件,以便按需引入 Ant Design Vue 的组件及其样式。

// nuxt.config.tsimport { defineNuxtConfig } from 'nuxt'
import Components from 'unplugin-vue-components/vite'
import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'
import { createStyleImportPlugin, AndDesignVueResolve } from 'vite-plugin-style-import'export default defineNuxtConfig({css: ['@/assets/less/style.less',// '@/assets/less/iconfont.less'],vite: {plugins: [Components({resolvers: [AntDesignVueResolver(), ]}),createStyleImportPlugin({resolves: [AndDesignVueResolve()],libs: [{libraryName: "ant-design-vue",esModule: true,resolveStyle: (name) => `ant-design-vue/es/${name}/style/index` // 注意这里的路径适用于vite-plugin-style-import 2.0版本},]}),]},
})
按需引入 BackTop 组件

在需要使用 BackTop 组件的页面布局文件中,按需引入 BackTop 组件。由于我们在 nuxt.config.ts 中已经配置了按需引入样式,这里只需要引入组件即可。

假设你的页面布局文件是 layouts/default.vue,你可以这样配置:

<template><div><NavBar /><LeftMenu /><NuxtPage /><Footer /><a-back-top/></div>
</template><script lang="ts" setup>
import NavBar from '@/components/layout/NavBar.vue'
import LeftMenu from '@/components/layout/LeftMenu.vue'
import Footer from '@/components/layout/Footer.vue'
</script>
解释
  1. 引入组件

    import BackTop from 'ant-design-vue/es/back-top'
    

    这行代码按需引入了 BackTop 组件。

  2. 配置 nuxt.config.ts

    • Components 插件:使用 Components 插件和 AntDesignVueResolver 自动引入 Ant Design Vue 的组件,而不需要在每个页面手动导入。
    • createStyleImportPlugin:使用 createStyleImportPluginAndDesignVueResolve 按需引入 Ant Design Vue 的样式。
注意事项
  • 避免全局引入:在 plugins/antd.client.ts 中全局引入 Ant Design Vue 的所有组件和样式会导致打包文件体积增大,并可能引起样式冲突。因此,建议按需引入所需的组件和样式。删除或注释掉以下内容:

    // plugins/antd.client.ts// 移除全局引入
    // import Antd from "ant-design-vue";
    // import 'ant-design-vue/dist/antd.css'; // 如果取消注释,会引入全部样式// export default defineNuxtPlugin((nuxtApp) => {
    //   nuxtApp.vueApp.use(Antd)
    // })
    
  • 样式路径:确保你引入的样式路径是正确的。根据 vite-plugin-style-import 2.0 版本的路径,使用 ant-design-vue/es/${name}/style/index

使用模块化引入

如果你更喜欢使用模块化引入的方式,Nuxt 3 提供了 @nuxtjs/ant-design-vue 模块,可以更方便地按需引入组件。以下是使用模块化引入的方式:

  1. 安装模块

    npm install @nuxtjs/ant-design-vue ant-design-vue
    

    yarn add @nuxtjs/ant-design-vue ant-design-vue
    
  2. 配置 nuxt.config.ts

    // nuxt.config.tsimport { defineNuxtConfig } from 'nuxt'export default defineNuxtConfig({css: ['@/assets/less/style.less',// '@/assets/less/iconfont.less'],modules: ['@nuxtjs/ant-design-vue'],antDesignVue: {components: ['BackTop'], // 按需引入 BackTop 组件styles: true // 自动引入按需组件的样式}
    })
    
  3. 使用 BackTop 组件的页面或组件

    <template><div><NavBar /><LeftMenu /><NuxtPage /><Footer /><BackTop /></div>
    </template><script lang="ts" setup>
    import NavBar from '@/components/layout/NavBar.vue'
    import LeftMenu from '@/components/layout/LeftMenu.vue'
    import Footer from '@/components/layout/Footer.vue'// 不需要手动导入 BackTop 组件,模块会自动处理
    </script>
    

通过这种方式,你可以按需引入 BackTop 组件及其样式,避免引入整个库,从而减小打包体积,提高性能。

方法二:手动方式引入样式

上述在 nuxt.config.ts 文件中配置 vite-plugin-style-import,使用了自动方式引入css样式。如果不使用vite-plugin-style-import这个插件的话,也可以手动配置。
下面介绍下不使用vite-plugin-style-import插件的方法。

在nuxt.config.ts中引入需要的样式,对应的样式可以在node_modules\ant-design-vue\es\back-top路径下找到css样式,
再在nuxt.config.ts配置:

css: ['ant-design-vue/es/message/style/css','ant-design-vue/es/back-top/style/index','@/assets/less/style.less'// '@/assets/less/iconfont.less']

注意,不建议在plugin中全局的方式引入组件和样式,那样会增大体积或可能造成样式冲突。

<a-back-top />BackTop 的区别
  • <a-back-top />:自动导入组件,适用于使用 unplugin-vue-components 插件的自动解析功能。
  • BackTop:手动导入组件,适用于需要按需引入特定组件及其样式的情况。
为什么 BackTop 方式必须手动导入样式?

当你使用 BackTop 方式时,手动导入组件和样式的原因如下:

  1. 按需引入:手动导入可以按需引入特定的组件及其样式,而不是整个库,从而减小打包体积,提高性能。
  2. 避免全局冲突:手动导入可以避免全局引入时可能出现的样式冲突问题。
  3. 灵活性:手动导入提供了更大的灵活性,可以根据需要选择性地引入组件和样式。
示例:手动导入 BackTop 组件及其样式

假设你的页面布局文件是 layouts/default.vue,你可以这样配置:

<template><div><NavBar /><LeftMenu /><NuxtPage /><Footer /><a-back-top /></div>
</template><script lang="ts" setup>
import NavBar from '@/components/layout/NavBar.vue'
import LeftMenu from '@/components/layout/LeftMenu.vue'
import Footer from '@/components/layout/Footer.vue'import BackTop from 'ant-design-vue/es/back-top'
import 'ant-design-vue/es/back-top/style/index.css' // 手动引入样式
</script>

通过这种方式,你可以按需引入 BackTop 组件及其样式,避免引入整个库,从而减小打包体积,提高性能。

总结
  • <a-back-top />:适用于使用 unplugin-vue-components 插件的自动解析功能,简化组件导入过程。
  • BackTop:适用于需要手动按需引入组件及其样式,提供更大的灵活性和更细粒度的控制。
结论

在 Nuxt 3 项目中使用 Ant Design Vue 的 BackTop 组件,可以通过按需引入的方式加载组件及其样式。这样可以避免引入不必要的文件,减小打包体积,提高性能,并且减少样式冲突的可能性。

希望本文对你有所帮助!如果你在使用过程中遇到任何问题,欢迎在评论区留言讨论。


参考资料:

  • Ant Design Vue 官方文档
  • Vite 官方文档
  • Nuxt 3 官方文档
  • https://www.cnblogs.com/xuruiming/p/17940021
  • https://juejin.cn/post/7205842390841901093

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在统信UOS(Linux)中构建SQLite3桌面应用笔记

目录 1 下载lazarus 2 下载sqlite3源码编译生成库文件 3 新建项目 4 设置并编译 一次极简单的测试&#xff0c;记录一下。 操作系统&#xff1a;统信UOS&#xff0c; 内核&#xff1a;4.19.0-arm64-desktop 处理器&#xff1a;D3000 整个流程难点是生成so库文件并正确加…

Host ‘db01‘ is not allowed to connect to this MariaDB server 怎么解决?

出现错误 ERROR 1130 (HY000): Host db01 is not allowed to connect to this MariaDB server&#xff0c;表示当前用户 test 没有足够的权限从主机 db01 连接到 MariaDB 服务器。以下是逐步解决方案&#xff1a; 1. 检查用户权限 登录 MariaDB 服务器&#xff08;需本地或通过…

打造高可用的大模型推理服务:基于 DeepSeek 的企业级部署实战

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;从“能部署”到“可用、好用、能扩展” 近年来&#xff0c;随着 DeepSeek、Qwen、Yi 等开源大模型的持续发…

Spring Boot 使用 ElasticSearch

第一步&#xff0c;开启本地的 ElasticSearch 启动 elasticSearch.bat npm run start (head 插件) 第二步&#xff0c;在 Spring Boot 项目中引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-hig…

软件开发的“中庸之道”:因势而为,心中有数

【软件工程】软件开发的“中庸之道”&#xff1a;因势而为&#xff0c;心中有数 在软件开发的方法论讨论中&#xff0c;我们常常陷入非此即彼的二元对立&#xff1a;要么追求极致的规范化和流程化&#xff0c;严格遵循软件工程的各项标准&#xff1b;要么完全摒弃方法论&#x…

Go和Elixir极简HTTP服务对比

Go 和 Elixir 都是我非常喜欢的编程语言&#xff0c;这次来对比下它们实现一个原生极简 HTTP 服务的过程。 Go 语言标准库自带了网络服务库&#xff0c;只需要简单几行代码就可以实现一个网络服务&#xff0c;这也是一开始它吸引我的一个方面。而 Elixir 标准库本身没有网络服…

为何要学习Objective-C?从环境搭建开始

目录 前言 Swift时代为何还要学Objective-C&#xff1f; 开发环境搭建 1. 安装Xcode 2. 创建第一个Command Line Tool项目 初识Objective-C代码 编写"Hello, Objective-C!" 编译运行程序 为什么Objective-C中的NSLog和NSString前面都有"NS"前缀&a…

ubuntu18.04安装 gcc 9以及2019版本tbb

一、安装gcc 9 ubuntu18.04默认是用的gcc7.5 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt update sudo apt-get install gcc-9 g-9 下面是配置优先用哪个版本的gcc和g &#xff0c;后面带的值越大越优先用谁&#xff0c;并且配置完全局生效不仅仅是在当…

JdbcUtils的三个版本以及sql注入问题

JDBC的工具类 1.0版本 JDBC的工具类 2.0版本&#xff08;智能一些&#xff09;&#xff0c;编写properties属性文件&#xff0c;程序就可以读取属性文件 JDBC的工具类 3.0版本&#xff0c;加入连接池对象 我们封装jdbc工具类是为了减少代码重复&#xff0c;方便开发&#xff0…

AS32系列MCU芯片I2C模块性能解析与调试

国科安芯推出的AS32X601内置的I2C模块提供了符合工业标准的两线串行制接口&#xff0c;可用于MCU和外部IIC设备的通讯。IIC总线使用两条串行线&#xff1a;串行数据线SDA和串行时钟线SCL。 IIC接口模块实现了IIC协议的标准模式和快速模式&#xff0c;支持多主机IIC总线架构。其…

钉钉小程序开发实战:打造一个简约风格的登录页面

在上一篇文章中&#xff0c;我们已经介绍了如何搭建钉钉小程序的基础环境&#xff0c;并完成了项目的初始化配置。本文将继续深入&#xff0c;手把手带你实现一个简约风格的登录页面&#xff0c;这是大多数企业级应用不可或缺的一部分。 钉钉小程序基于前端 Web 技术栈&#x…

论文研读2-1:多GNSS双历元纯相位定位-模型建立与误差分析

后续文章: 论文研读2-2&#xff1a;多GNSS双历元纯相位定位-固定模糊度精度增益 论文研读2-3&#xff1a;多GNSS双历元纯相位定位-定位精度分析 仅相位定位中的模糊度解算问题 在卫星导航定位中&#xff0c;载波相位测量是实现高精度定位的基础&#xff0c;但如果仅使用相位测…

Python----OpenCV(图像増强——图像平滑、均值滤波、高斯滤波、中值滤波、双边滤波)

Python----计算机视觉处理&#xff08;Opencv&#xff1a;图像噪点消除&#xff1a;滤波算法&#xff0c;噪点消除&#xff09; 一、图像平滑 图像平滑处理&#xff08;Smoothing Images&#xff09;&#xff0c;也称为图像模糊处理、图像滤波&#xff08;Images Filtering&am…

笔记:使用EasyExcel导入csv文件出现编码问题,导致导入数据全为null的解决方法

笔记&#xff1a;使用EasyExcel导入csv文件出现编码问题&#xff0c;导致导入数据全为null的解决方法 通常情况下&#xff0c;我们使用excel导入&#xff0c;但是部分情况下或者领导要求&#xff0c;我们需要使用csv导入文件&#xff0c;但是csv文件模板下载之后会变成系统当前…

NL2SQL(Natural Language to SQL)优化之道:提升准确率与复杂查询能力

自然语言 → SQL 的转译&#xff08;NL2SQL&#xff09;技术&#xff0c;是让非技术用户与数据库“对话”的桥梁。而在实际应用中&#xff0c;我们不仅需要“能转”&#xff0c;更要“转得准、转得全、转得快”。 一、什么是 NL2SQL&#xff1f; NL2SQL&#xff08;Natural La…

java中map的循环方式

什么是Map集合&#xff1f; Map是Java中的一个接口&#xff0c;它用于存储键-值对&#xff0c;并且键和值都可以是任意对象。它是Java集合框架中的一部分&#xff0c;并提供了一些方法来操作和访问Map中的元素。 Map中的每个键都是唯一的&#xff0c;这意味着不能使用相同的键…

python学习笔记(深度学习)

文章目录 1、概述2、学习内容2.1、pytorch 常见语法2.1.1、sum2.1.2、广播机制2.1.3、张量2.1.4、DataLoader 2.2、普通语法2.2.1、迭代器 1、概述 本篇博客用来记录&#xff0c;在深度学习过程中&#xff0c;常用的 python 语法内容 2、学习内容 2.1、pytorch 常见语法 2.…

力扣网C语言编程题:搜索二维矩阵(右上角->左下角解法)

一. 简介 上一篇文章关于"在二维数组中查找某个元素"的问题&#xff0c;提供了两种解题思路&#xff0c;文章如下&#xff1a; 力扣网C语言编程题&#xff1a;搜索二维矩阵的普通解法与二分查找法-CSDN博客 本文提供第三种解题思路&#xff1a;从左下角->右上角…

AI大模型流式输出,OkHttp Log拦截打印方案

背景&#xff1a; 使用okhttp框架进行网络访问时&#xff0c;一般会使用 HttpLoggingInterceptor 打印请求和响应的log。在使用okhttp访问AI大模型时&#xff0c;如果选择流式输出&#xff0c;那么响应的body数据使用的SSE技术&#xff0c;服务异步发送大模型生成的增量token&…

看数据世界的历史:全面梳理从关系库、大数据到AI时代的数据发展及展望

序章 在数据库不断发展的时代里&#xff0c;我们看到了关系型数据库&#xff08;RDB&#xff09;在一次次的数据演变过程中的占据王位&#xff0c;捍卫了胜利&#xff0c;像一个王朝更替下的“王权”的故事&#xff0c;精彩有趣。 本篇就来探讨下数据库的发展兴衰史&#xff0…