搭建一个vue3+vant4+vite4+pinia 的移动端h5模板

news2024/11/27 1:30:20

效果图

图片1 图片2
图片1 图片2

项目的创建和组件库的安装

  1. 项目创建
pnpm create vite vue3-vant4-vite-pinia-pro-h5

注意: node版本控制在 18+, 可以通过nvm来管理本地的node版本,具体可以看这篇文章 nvm的简单使用

  1. vant-ui库的安装【这里安装的是 ^4.6.0 版本的】
pnpm add vant

注意: 具体的一些配置这里就不介绍了,可以去 vant-ui官网 查看详细的安装和配置

项目目录预览

请添加图片描述

就按上面的项目目录 对主要的文件就行简单说明。

  1. api 文件目录 【存放项目中所有的接口】
import request from "@/utils/request";

// banner 列表
export const getBannerList = (params) => request.get(`/goodsBanner/list`, { params });
// 菜单列表
export const getMenuList = (params) => request.get(`/homeMenu/getList`, { params });
  1. assets 文件目录【存放项目中的一些静态文件: icon、svg等】
  2. components 文件目录【存放项目中的组件】
    在这里插入图片描述

简要说明:
globalComponents : 全局组件,已经全局注册 【页面使用不需要引入】(一般很常用的组件放这里)
localComponents : 本地组件, 没有全局注册 【页面使用需要手动引入】(一般不常用的可以放这里)
registerGlobComp: 组件注册文件,注册全局组件和vant-ui组件【vant-ui组件我这里用的是按需引入,需要手动引入】,如何想全局引入vant-ui组件,可以去 vant-ui官网 查看

  1. directives文件目录【存放自定义的vue指定】,以下是一个自定义的旋转指令(v-rotate)
  • 代码
const rotateDirective = {
  /**
   * mounted 钩子函数,在绑定元素的父组件及他自己的所有子节点都挂载完成后调用
   * el: 指令绑定到的元素。这可以用于直接操作 DOM。
   * value: 传给指令的值,也就是我们要 copy 的值
   */
  mounted(el, { value }) {
    // console.log("value==:", value, typeof value);
    el.$value = value; // 用一个全局属性来存传进来的值,因为这个值在别的钩子函数里还会用到
    // el.className = 'v-rotate'
    el.classList.add("v-rotate");
    if (typeof value === "undefined") return;
    el.style.display = value ? "block" : "none";
  },
  // 在绑定元素的父组件及他自己的所有子节点都更新后调用
  updated(el, { value }) {
    // console.log("更新触发", value);
    if (typeof value === "undefined") return;
    el.style.display = value ? "block" : "none";
  },
  // 指令与元素解绑后,移除事件绑定
  unmounted(el) {
    el.classList.remove("v-rotate");
  },
};

export function setupRotateDirective(app) {
  app.directive("rotate", rotateDirective);
}

export default rotateDirective;

  • 具体使用 【可以去本项目的 src/views/mine/index.vue 文件查看】
 <SvgIcon v-rotate icon-class="loading" />
  1. hooks文件目录 【钩子函数】,以下是封装的是一个loading 钩子
  • 代码
import { showLoadingToast } from "vant";
import { onBeforeUnmount } from "vue";

export function useLoading() {
  let toast = null;
  const startLoading = () => {
    toast = showLoadingToast({
      duration: 0,
      forbidClick: true,
      message: "加载中...",
      overlay: true,
    });
  };
  const stopLoading = () => {
    toast && toast.close();
  };

  onBeforeUnmount(stopLoading);

  return { startLoading, stopLoading };
}

  • 具体使用 【可以去本项目的 src/views/index/index.vue 文件查看】
// 引入
import { useLoading } from '@/hooks/useLoading'
// 导出
const { startLoading, stopLoading } = useLoading()
 //  接口调用
  startLoading()
  getBannerList().then((res) => {
	    stopLoading()
	    console.log("数据:", res);
	    const list = res.result || [];
	    list.map(
	    (v) => (v.url = v.url.includes("http") ? v.url : `http://${v.url}`)
	  );
  	bannerList.value = list;
  });
  1. router 文件目录 【存放页面的路由】
  2. store 文件目录【这里是项目的全局存储-用的pinia】
import { createPinia, defineStore } from "pinia";
// 引入持久化插件
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
// 实例化pinia
export const store = createPinia();
// 使用持久化存储插件
store.use(piniaPluginPersistedstate);

// 系统统一存储
export const useAppStore = defineStore("app", {
  state: () => ({
    appName: "我是app名称",
  }),
  actions: {
    // 设置app名称
    setAppName(data) {
      this.appName = data;
    },
  },
  persist: {
		storage: localStorage, //default localStorage
	},
});
  1. styles 文件目录【这里存放的项目中一些初始化css样式、组件库统一css样式修改、全局css变量等样式】
  2. utils 文件目录 【存放一写工具函数:request.js 请求封装、wxJssdkTools.js 微信jssdk封装等】
  3. views 文件目录【存放页面的文件】
  4. .env .env.development .env.production 【三个项目配置文件:主要用于全局的配置,以及打包环境的配置】
  5. postcss.config.cjs 文件【PostCSS 示例配置】
  6. README.md 文件 【项目搭建过程中一些常用组件、方法的简单说明和使用】
  7. vite.config.js 文件【vite的一些相关配置】

源码地址和下载

代码仓库地址: Gitee | Github 或者直接复制下面的链接 直接下载代码

  • Gitee 远程仓库下载链接
https://gitee.com/junfeng535/vue3-vant4-vite-pinia-pro-h5.git
  • Github 远程仓库下载链接
https://github.com/junfeng-git/vue3-vant4-vite-pinia-pro-h5.git

其他一些页面截图

请添加图片描述

请添加图片描述
请添加图片描述

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

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

相关文章

云南区块链商户平台优化开发

背景 云南区块链商户平台是全省统一区块链服务平台。依托于云南省发改委、阿里云及蚂蚁区块链的国内首个省级区块链平台——云南省区块链平台同步上线&#xff0c;助力数字云南整体升级。 网页版并不适合妈妈那辈人使用&#xff0c;没有记忆功能&#xff0c;于是打算自己开发…

不想让Win系统更新,那就让它暂停一万年

按照下图所示进行操作 winR 输入 regedit&#xff0c;进入注册表编辑器 随后依次点击 HKEY_LOCAL_MACHINE ⬇ SOFTWARE ⬇ Microsoft ⬇ WindowsUpdate ⬇ UX ⬇ Settings 最后在右侧空白处 文件类型 新建DWORD&#xff08;32位&#xff09;值&#xff08;D&#xff09; 命名…

sharding-jdbc如何实现分页查询

写在文章开头 在之前的文章中笔者简单的介绍了sharding-jdbc的使用&#xff0c;而本文从日常使用的角度出发来剖析一下sharding-jdbc底层是如何实现分页查询的。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff0c;是 CSDN的博客…

私域流量优化:如何利用 AIPL 模型洞察客户生命周期价值

在当今这个数字化时代&#xff0c;商业战场的硝烟从未如此浓烈。随着互联网红利的逐渐消退&#xff0c;公域流量的成本水涨船高&#xff0c;企业间对于有限用户资源的争夺已进入白热化阶段。每一次点击、每一个曝光背后&#xff0c;都是企业不得不承担的高昂代价。在此背景下&a…

1725 ssm资产管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm资产管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/…

本安防爆手机在电力行业中的应用

在电力行业这一充满挑战与风险的领域中&#xff0c;安全始终是最为首要的考量。电力巡检、维修等作业往往涉及易燃、易爆环境&#xff0c;这就要求工作人员配备能够在极端条件下保障通讯和作业安全的专业设备。防爆手机应运而生&#xff0c;以其独特的设计和卓越的性能&#xf…

Kafka 执行命令超时异常: Timed out waiting for a node assignment

Kafka 执行命令超时异常&#xff1a; Timed out waiting for a node assignment 问题描述&#xff1a; 搭建了一个kafka集群环境&#xff0c;在使用命令行查看已有topic时&#xff0c;报错如下&#xff1a; [rootlocalhost bin]# kafka-topics.sh --list --bootstrap-server…

es关闭开启除了系统索引以外的所有索引

1、es 开启 “删除或关闭时索引名称支持通配符” 功能 2、kibanan平台执行 POST *,-.*/_close 关闭索引POST *,-.*/_open 打开索引3、其他命令 DELETE index_* // 按通配符删除以index_开头的索引 DELETE _all // 删除全部索引 DELETE *,-.* 删除全…

产品推荐 | 基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

01 产品概述 板卡主芯片采用Xilinx公司的XC7K325T-2FFG900 FPGA&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900&#xff0c;支持8-Lane PCIe、64bit DDR3、四路SFP连接器、四路SATA接口、内嵌16个高速串行收发器RocketIO GTX&#xff0c;软件具有windows驱动。 02 技术指标…

【数据结构】栈的实现以及数组和链表的优缺点

个人主页&#xff1a;一代… 个人专栏&#xff1a;数据结构 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进…

小程序(三)

十三、自定义组件 &#xff08;二&#xff09;数据方法声明位置 在js文件中 A、数据声明位置&#xff1a;data中 B、方法声明位置methods中&#xff0c;这点和普通页面不同&#xff01; Component({/*** 组件的属性列表*/properties: {},/*** 组件的初始数据*/data: {isCh…

在Ubuntu安装Carla时按照官方的教程将下载好的资源包解压放到Unreal\CarlaUE4\Content\Carla后执行./Update.sh

在Ubuntu安装Carla时按照官方的教程将下载好的资源包解压放到 Unreal\CarlaUE4\Content\Carla后执行./Update.sh 结果出现&#xff0c;将原来的Carla文件夹备份了有创建了一个新的空白Carla文件夹 原来自己下载解压后就不用再执行./Update.sh这个了&#xff0c;这个命令就是…

【Redis分布式缓存】分片集群

Redis 分片集群 搭建分片集群 集群结构 分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 这里我们会在同一台虚拟机中开启6个redis实例&…

逻辑回归和神经网络(原理+应用)

目录 一、背景介绍 二、题目要求 三、逻辑回归&#xff08;Logistic Regression&#xff09;与神经网络 四、输入输出变量 五、效果评估Gains介绍 六、模型构建 具体应用&#xff1a;预测客户是否有意预订有线电视交互服务 一、背景介绍 当今时代&#xff0c;有线电视交…

【JavaEE 初阶(四)】多线程进阶

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.常见的锁策略2.1悲观锁vs乐观锁2.2轻量级锁vs重量级锁2.3自旋锁vs挂起锁2.4读写…

JS控制台代码:淘宝PC网页付款页面定时确认付款

淘宝定时抢东西用的 必须先输入完正确密码&#xff0c;考虑上了网络延迟&#xff0c;程序提前一秒钟点击确认&#xff0c;可自行修改&#xff1a; function checkTime() {var now new Date();var hours now.getHours();var minutes now.getMinutes();var seconds now.getS…

线程池核心原理浅析

前言 由于系统资源是有限的&#xff0c;为了降低资源消耗&#xff0c;提高系统的性能和稳定性&#xff0c;引入了线程池对线程进行统一的管理和监控&#xff0c;本文将详细讲解线程池的使用、原理。 为什么使用线程池 池化思想 线程池主要用到了池化思想&#xff0c;池化思想…

vivado 低级别 SVF JTAG 命令

低级别 SVF JTAG 命令 注释 &#xff1a; 在 Versal ™ 器件上不支持 SVF 。 低级别 JTAG 命令允许您扫描多个 FPGA JTAG 链。针对链操作所生成的 SVF 命令使用这些低级别命令来访问链中的 FPGA 。 报头数据寄存器 (HDR) 和报头指令寄存器 (HIR) 语法 HDR length […

健康知识集锦

页面 页面代码 <% layout(/layouts/default.html, {title: 健康知识管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"box-header"><div class"box-title"&g…

CDGA|电子行业数据治理六大痛点及突围之道

CDGA|电子行业数据治理六大痛点及突围之道 随着信息技术的迅猛发展&#xff0c;电子行业对数据的需求和依赖日益增强。然而&#xff0c;数据治理作为确保数据质量、安全性及有效利用的关键环节&#xff0c;在电子行业中却面临着一系列痛点。本文将深入探讨电子行业数据治理的六…