vue3搭建实战项目笔记二

vue3搭建实战项目笔记二

      • 2.1.git管理项目
      • 2.2.隐藏tabBar栏
        • 2.2.1 方案一:在路由元信息中设置一个参数是否显示tabBar
        • 2.2.2 方案二:通过全局设置相对定位样式
      • 2.3.项目里封装axios
        • 2.3.1 发送网络请求的两种做法
        • 2.3.2 封装axios并发送网络请求
          • 2.3.2.1 对axios的封装写在index.js中
          • 2.3.2.2 统一配置文件
          • 2.3.2.2 统一引用
        • 2.3.3 测试发送网络请求并存储数据
          • 2.3.3.1 创建storei并编写网络请求函数
          • 2.3.2.2 封装请求地址函数
          • 2.3.2.3 测试调用接口发送网路请求
          • 2.3.2.4 补充数据请求地址封装的过程
          • 2.3.2.5 封装axios的好处

2.1.git管理项目

  • createVue工具默认没有初始化git仓库,vue-cli是默认初始化git本地仓库的

    • 基于webpack工具;
    • 命令:vue create xxx
  • 没有的话,手动用git来做一个项目管理

    • 初始化一个git仓库
    • 命令:
      • 1.git init 初始化仓库
      • 2.git add . 将对应的文件添加的本地仓库
      • 3.git commit -m ‘xxx’ 做一个本地提交版本
      • 4.补充husky是一个用于git钩子的工具,提交代码时做验证
  • 依赖问题:

    • 当出现npm install报错安装不上的时候,
    • 查看报错原因,如果是依赖不兼容,可以使用–force(强制安装)或者 --legacy-peer-deps(忽略冲突、各自安装)

2.2.隐藏tabBar栏

2.2.1 方案一:在路由元信息中设置一个参数是否显示tabBar
- 在router文件夹下index.js中设置路由元信息```javascript  import { createRouter,  createWebHashHistory } from 'vue-router'const router = createRouter({history: createWebHashHistory(),// 映射关系:path -> componentroutes: [{path: '/city',component: () => import('@/views/city/city.vue'),meta: {hideTabBar: true}}]})export default router;```
- 在App.vue中通过获取当前活跃的路由对象的meta信息,通过判断是否隐藏tabBar来控制tabBar的显示和隐藏```javascript  <template><div class="app"><!-- 根据路由元信息是否显示 tabBar --><router-view></router-view><tab-bar v-if="!route.meta.hideTabBar"/></div></template><script setup>import tabBar from '@/components/tab-bar/tab-bar.vue';import { useRoute } from 'vue-router';// 当前活跃的路由对象const route = useRoute()</script>```
2.2.2 方案二:通过全局设置相对定位样式
- 在common.css中设置top-page
- 样式如下:```javascript.top-page {position: relative;z-index: 9;height: 100vh;overflow-y: auto;background-color: #fff;}```
- 使用时加上类名即可

2.3.项目里封装axios

2.3.1 发送网络请求的两种做法
  • 两种做法如下:
    1. 引入第三方库 axios,直接在组件页面直接使用axios发送网络请求,但是这样来做不好,不利于代码维护
    2. 最好对axios做一层封装,不管是复用性、可用性、可维护性,甚至框架的替换都是更方便的
2.3.2 封装axios并发送网络请求
2.3.2.1 对axios的封装写在index.js中
  • 步骤: 在service文件夹下新建request文件夹,然后在新建index.js

  • index.js代码如下:

        ```javascript import axios from 'axios'import { BASE_URL, TIME_OUT } from './config'class HyRequest {constructor(baseURL, timeout = 10000) {this.instance = axios.create({baseURL,timeout})}request(config) {return new Promise((resolve, reject) => {this.instance.request(config).then(res => {resolve(res.data)}).catch(err => {reject(err)})})}get (config) {return this.request({...config, method: 'get'})}post (config) {return this.request({...config, method: 'post'})}}export default new HyRequest(BASE_URL, TIME_OUT)```
    
    • 文件结构图如下: 在这里插入图片描述
2.3.2.2 统一配置文件
  • 步骤: 在request文件夹,然后在新建config.js主要用于配置基础路径和超时时间
  • config.js代码如下:
                export const BASE_URL = "http://123.207.32.32:1888/api"export const TIME_OUT = 10000```![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ac0accb215d646639a93558bf1358dab.png)
2.3.2.2 统一引用
  1. 在request文件下的index.js文件中如分别引入这两个参数
  2. 完整代码如图:

在这里插入图片描述

2.3.3 测试发送网络请求并存储数据
  1. 使用pinia状态管理库在actions发送网络请求
  2. 关键点:
    • 在state里面存储数据
    • 在actions里面编写异步函数(网络请求函数)
    • 在页面调用异步函数(网络请求函数)
2.3.3.1 创建storei并编写网络请求函数
  1. 创建home模块——在stores新建modules文件夹,新建一个模块home.js处理home中共的网络请求和数据存储
    • 代码如下:
         import { defineStore } from "pinia";import hyRequest from '@/service/request/index.js'const useHomeStore = defineStore("home", {state: () => ({hotSuggests: [],categories: []}),actions: {async fetchHotSuggests () {const res = await hyRequest.get({ url:'/home/hotSuggests' })this.hotSuggests = res.data}}})export default useHomeStore
      
  2. 考虑到模块中可能会有大量网络请求,可能会有大量的网络请求地址会造成后期不好维护,所以在做了一层封装
    • 代码如下:
                import { defineStore } from "pinia";import { getHomeHotSuggests } from "@/service";const useHomeStore = defineStore("home", {state: () => ({hotSuggests: [],categories: []}),actions: {async fetchHotSuggests () {const res = await getHomeHotSuggests()this.hotSuggests = res.data}}})export default useHomeStore```
2.3.2.2 封装请求地址函数
  1. 封装的原因:
    • 会造成组件页面过多的维护请求URL,代码冗余
    • 后期不利于修改和维护这个地址,如发生修改需要找到对应的组件,在修改对应的地址,不方便进行管理
  2. 第一步在service文件下新建modules文件夹,然后新建一个模块home.js文件,统一处理home页面请求地址函数(相当于对请求地址做了一层单独的封装)
    • 代码如下:
      	import hyRequest from '../request'export function getHomeHotSuggests () {return hyRequest.get({ url: "/home/hotSuggests" })}```
      
  3. 第二步统一导出请求地址函数,在service文件夹下新建index.js,先从各模块中导入所有的函数,然后在进行统一导出
    • 代码如下:
      // ./modules/home从这个文件里面导入该文件所有导出的东西
      // export * 然后在这里统一做一个导出(把所有导入的东西都导出下)
      export * from './modules/city'
      export * from './modules/home'
      
2.3.2.3 测试调用接口发送网路请求
  1. 测试调用接口函数,在home页面发送网络请求
    • 代码如下
    	<script setup>import useHomeStore from '@/stores/modules/home';// 发送网络请求const homeStore = useHomeStore()homeStore.fetchHotSuggests()</script>```
    
  2. 在子组件中获取数据
    • 代码如下:
      	<template><div class="section hot-suggests"><template v-for="(item,index) in hotSuggests" :key="index"><div class="item":style="{ color: item.tagText.color, background: item.tagText.background.color }">{{ item.tagText.text }}</div></template></div></template><script setup>import useHomeStore from '@/stores/modules/home'import { storeToRefs } from 'pinia'// 热门建议const homeStore = useHomeStore()const { hotSuggests } = storeToRefs(homeStore)</script>
      
2.3.2.4 补充数据请求地址封装的过程
  1. 整体过程:单个组件想拿数据,不需要关心这个数据请求的URL(对于组件来说),只需要从modules文件下找到对应的模块,引入对应的模块,直接调用相对应的接口地址函数封装
  2. 详细过程:
    • 比如调用home.js中的getHomeHotSuggests的时候,要请求的URL和参数,全部都在home.js模块中做拼接的
    • 地址和参数拼接好后在发送网络请求,拿到数据返回的是promise
    • 把promise的数据返回出去,最后调用这个promise拿到数据,在组件中做数据渲染
  3. 文件目录结构如图:
    在这里插入图片描述
2.3.2.5 封装axios的好处
  • 当项目代码越来越多的时候,上面的组织架构思路就会更清晰,做了一个分层架构,便于维护和修改, 将很多功能做了一个力度化

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

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

相关文章

USC 安防平台之移动侦测

随着第四次科技革命的开启&#xff0c;AI技术获取了突飞猛进的发展&#xff0c;视频监控对应的视频分析技术也获取了巨大的发展。 还记得15年前采用人工提取特征做前景背景分离和提取&#xff0c;大部分依赖CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;开发难度…

Unity CommandBuffer绘制粒子系统网格显示

CommandBuffer是 Unity 提供的一种在渲染流程中插入自定义渲染命令的机制。在渲染粒子系统时&#xff0c;常规的渲染流程可能无法满足特定的渲染需求&#xff0c;而CommandBuffer允许开发者灵活地设置渲染参数、控制渲染顺序以及执行自定义的绘制操作。通过它&#xff0c;可以精…

【天地图】绘制、删除点线面

使用天地图绘制、删除点线面 实现效果图地图组件完整代码使用地图组件完整代码 实现效果图 地图组件完整代码 // 天地图组件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)

通过B站黑马程序员的八股文教学&#xff0c;自己也二刷了&#xff0c;结合ChatGpt、deepSeek总结了一下,Java八股文详细文档.2&#xff08;Redis篇和消息中间件篇&#xff0c;还没有写完&#xff0c;这只是一部分&#xff09; Java八股文详细文档.1&#xff08;包含JVM篇、数据…

简述 tsconfig.json 中 rootDir 和 include 之间的关系

tsconfig.json 中的 rootDir 和 include 之间有一定的关系&#xff0c;但它们的作用是不同的。理解它们的关系可以帮助你更好地配置 TypeScript 项目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 编译器&#xff08;tsc&#xff09;的“根目录”。它的主要作用是&#x…

如何在Spring Boot中使用Profiles实现环境隔离

文章目录 如何在Spring Boot中使用Profiles实现环境隔离什么是Spring Profiles1.基本概念2.配置管理3.使用场景4.条件化配置5.优点Spring Profiles的基础知识1.Profile的定义2.配置文件3.激活Profiles4.条件化配置5.Profile的优先级与合并6.Profiles的最佳实践配置文件的组织1.…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; ??有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务…

微信小程序网络请求封装

微信小程序的网络请求为什么要封装&#xff1f;封装使用有什么好处&#xff1f; 封装的目的是为了偷懒&#xff0c;试想一下每次都要wx.request&#xff0c;巴拉巴拉传一堆参数&#xff0c;是不是很麻烦&#xff0c;有些公共的参数例如header&#xff0c;baseUrl是不是可以封装…

Element Plus table 去除行hover效果

需求&#xff1a; 给table的指定行设置高亮背景色且去除掉这些行的hover效果 思路&#xff1a; 给指定行设置css类名选择需要设置高亮的行的单元格&#xff0c;设置鼠标禁用属性让高亮行继承父元素的背景色 考虑到表格的第一列是勾选框&#xff0c;因此仅选择 tr 下除了第一…

认识vue-admin

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发&#xff1a;基于已有的代码&#xff08;项目工程&#xff0c;脚手架&#xff09;开进行新功能的开发 所以看懂已有的框架中的既有代码&#xff0c;变得很重要了 1. 背景知识 后台管理系统是一种最…

无人机航迹规划:孟加拉虎优化( Savannah Bengal Tiger Optimization ,SBTO)算法求解无人机路径规划MATLAB

一、孟加拉虎优化算法 孟加拉虎优化&#xff08; Savannah Bengal Tiger Optimization &#xff0c;SBTO&#xff09;算法模拟了孟加拉虎的群体狩猎行为&#xff0c;采用了猎物搜索、隐身接近和攻击狩猎三种策略。 参考文献&#xff1a; [1]Yujing Sun, Xingguo Xu. Savann…

sib报错:com.*.xctrunner is not in your device!

1、问题描述 在使用sonic集成IOS设备的时候,我们需要通过sonic-agent服务去识别IOS设备。但是在识别的时候提示如下问题: 本质就是在你这个设备中找不到这个设备也就是找不到WebDriverAgentRunner,但是确实安装了,甚至appium可以正常的调用。 或执行如下命令的时候报错:…

c++中什么时候应该使用final关键字?

在C中&#xff0c;final关键字是自C11标准引入的重要特性&#xff0c;主要用于类继承和虚函数重写机制的约束。下面从技术原理、使用场景和最佳实践三个维度进行系统分析&#xff0c;并给出工业级代码示例。 目录 一、技术原理深度解析 二、关键使用场景分析 1. 类级别的fi…

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南 一、前言 为了确保在 Docker 环境中顺利安装并高效运行 Ollama 以及 DeepSeek 离线模型&#xff0c;本文将详细介绍整个过程&#xff0c;涵盖从基础安装到优化配置等各个方面。通过对关键参数和配置的深入理解…

文件夹上传到github分支最后github上面还是没有文件和文件夹

环境&#xff1a; github 问题描述&#xff1a; 文件夹上传到github分支最后github上面还是没有文件和文件夹, 和这样一样 解决方案&#xff1a; 从 git ls-tree -r HEAD 的输出中可以看到&#xff0c;metahuman-stream 文件夹显示为如下内容&#xff1a; 160000 commi…

【JavaEE进阶】验证码案例

目 &#x1f332;实现说明 &#x1f384;Hutool介绍 &#x1f333;准备工作 &#x1f334;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f6a9;实现服务器后端代码 &#x1f6a9;前端代码 &#x1f6a9;整体测试 &#x1f332;实现说明 随着安全性的要求越来越⾼…

4G模块非必要,不关机!关机建议先进飞行模式

给4G模组VBAT断电关机&#xff0c;模组关机前未能及时退出当前基站&#xff0c;会有什么影响呢&#xff1f; 基站会误以为设备还在线&#xff0c;下次开机仍会拿着上次驻网信息去连基站。基站一看&#xff0c;上次链接还在——认为你是非法设备&#xff0c;拒绝链接&#xff…

Flutter中 List列表中移除特定元素

在 Dart 语言里&#xff0c;若要从子列表中移除特定元素&#xff0c;可以使用以下几种方法&#xff0c;下面为你详细介绍&#xff1a; 方法一&#xff1a;使用 where 方法创建新列表 where 方法会根据指定的条件筛选元素&#xff0c;然后通过 toList 方法将筛选结果转换为新列…

CF 148A.Insomnia cure(Java实现)

题目分析 这道题翻译出来后比较难理解&#xff0c;但是实际情况就是从1遍历d&#xff0c;看能不能被前四个值整除 思路分析 由上所述&#xff0c;存值后判断是否能整除&#xff0c;整除就答案1 代码 import java.util.*;public class Main {public static void main(String[]…

Java:单例模式(Singleton Pattern)及实现方式

一、单例模式的概念 单例模式是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例&#xff0c;是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景&#xff0c;例如日志记录器、配置管理、线程池、数据库…