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.pswp.cn/diannao/70064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70064.shtml
英文地址,請注明出處:http://en.pswp.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;例如日志記錄器、配置管理、線程池、數據庫…