【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,設置axios,utils工具包,vue.fonfig.js配置項 (下)

系列文章目錄

這里是創建移動端項目
【Vue】Vue2.x創建項目全程講解,保姆級教程,手把手教,Vue2怎么創建項目(上)
【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,接上一篇創建Vue2項目(中)
【Vue】Vue2創建移動端項目實戰教程,創建移動端項目保姆級教程,設置axios,utils工具包,vue.fonfig.js配置項 (下)


提示:寫完文章后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 系列文章目錄
  • 前言
  • 一、安裝vant2
    • 1.引入庫
    • 2.引入組件
    • 3.檢查組件以及適配
  • 二、設置樣式
    • 1.清除app.vue默認樣式
    • 2.新建全局樣式
    • 3.引入全局樣式
  • 三、設置axios請求
    • 1.下載axios,設置request請求
    • 2. 引入getToken方法
    • 3. 引入errorCode變量
  • 4、設置env環境
    • 1.創建本地環境dev
    • 2.創建服務器環境prod
  • 五、vue.config.js
    • 1. 創建vue.config.js
    • 2.修改后臺接口地址
  • 六、編寫api請求
    • 1.創建接口
    • 2.在vue頁面中引入api方法
  • 七、bin腳本文件,一鍵運行
    • 1、打包 -- build.bat
    • 2、下載依賴 -- package.bat
    • 3、運行 -- run-web.bat
  • 總結
    • gitee鏈接,已公開 [傳送門](https://gitee.com/guo-bomin/vue-app)


前言

請先看前兩篇上篇為創建項目,中篇為適配移動端,下篇為引入組件以及配置選項


一、安裝vant2

傳送門 Vant 輕量、可靠的移動端 Vue 組件庫

1.引入庫

我這里是vue2項目,如果是你的項目是vue3的話,說明你已經對vue2有了解了,這里僅供參考vue2的教程

# Vue 3 項目,安裝最新版 Vant:
npm i vant -S# Vue 2 項目,安裝 Vant 2
npm i vant@latest-v2 -S

2.引入組件

按需引入手動引入請看 vant官方寫法

全部引入,打開main.js文件

// 引入vantUI
import Vant from 'vant';
import 'vant/lib/index.css';
Vue.use(Vant);

在這里插入圖片描述

運行項目 npm run serve

3.檢查組件以及適配

修改views下的Home.vue頁面為如下代碼

<template><div class="home"><van-button type="primary">主要按鈕</van-button><van-button type="info">信息按鈕</van-button><van-button type="default">默認按鈕</van-button><van-button type="warning">警告按鈕</van-button><van-button type="danger">危險按鈕</van-button></div>
</template><script>
// @ is an alias to /srcexport default {name: 'Home',components: {}
}
</script>

效果如圖
在這里插入圖片描述
在這里插入圖片描述

雖然有移動端適配,但是像h2這種標簽,你不去給px大小,它好像不一定會轉化,就還是pc端大小

二、設置樣式

1.清除app.vue默認樣式

打開src/App.vue,刪除里面的默認樣式
最后保留為如下代碼

<template><router-view />
</template>

2.新建全局樣式

在src目錄下新建styles文件夾,然后在文件夾下新建一個base.css,代碼如下

body,ul{margin: 0;padding: 0;
}
ul{list-style: none;
}
h1,h2,h3,h4,h5,p,span{margin: 0;/* font-family: 'PingFang SC'; */font-family: PingFang SC-Heavy, PingFang SC;
}
a{text-decoration: none;color: #333;
}
img{vertical-align: middle;
}

這個是簡單版,復雜的可參考 通用css樣式模板,CSS 通用樣式總結

3.引入全局樣式

在styles新建index.css文件
內容如下

@import url(./base.css);

在這里插入圖片描述
main.js中,引入index.css文件

// 自定義基礎樣式庫
import './styles/index.css'

引入后效果如圖
在這里插入圖片描述

一般情況ui設計圖是750px寬度,vant是基于375,當你在ui設計圖上面的尺寸為16px時,你需要設置為32px,才能與設計圖一致。


三、設置axios請求

1.下載axios,設置request請求

傳送門axios中文文檔|axios中文網

npm install axios -S

在src目錄下創建文件夾 utils
在里面新建一個request.js文件

我這里考慮到請求需要攜帶token,以及生產環境和開發環境的配置,
request.js我直接貼出來,不作解釋,都有注釋,詳細可參考若依項目,很多腳手架功能都是來自于若依后臺系統

import axios from 'axios'
import errorCode from '@/utils/errorCode'
import {getToken
} from '@/utils/auth'import {Dialog,Notify
} from 'vant';axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'// 創建axios實例
const service = axios.create({// axios中請求配置有baseURL選項,表示請求URL公共部分baseURL: process.env.VUE_APP_BASE_API, // 本地后臺接口||服務器接口// 超時timeout: 40000
})
// request攔截器
service.interceptors.request.use(config => {// 是否需要設置 tokenconst isToken = (config.headers || {}).isToken === false// config.headers['Authorization'] = sessionStorage.getItem('token') // 讓每個請求攜帶自定義token 請根據實際情況自行修改// config.headers['token'] = sessionStorage.getItem('token') // 讓每個請求攜帶自定義token 請根據實際情況自行修改config.headers['Authorization'] = 'Bearer ' + getToken()// get請求映射params參數if (config.method === 'get' && config.params) {let url = config.url + '?';for (const propName of Object.keys(config.params)) {const value = config.params[propName];var part = encodeURIComponent(propName) + "=";if (value !== null && typeof (value) !== "undefined") {if (typeof value === 'object') {for (const key of Object.keys(value)) {let params = propName + '[' + key + ']';var subPart = encodeURIComponent(params) + "=";url += subPart + encodeURIComponent(value[key]) + "&";}} else {url += part + encodeURIComponent(value) + "&";}}}url = url.slice(0, -1);config.params = {};config.url = url;}return config
}, error => {console.log(error)Promise.reject(error)
})// 響應攔截器
service.interceptors.response.use(res => {// 未設置狀態碼則默認成功狀態const code = res.data.code || 200;// 獲取錯誤信息const msg = errorCode[code] || res.data.msg || errorCode['default']// 二進制數據則直接返回if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {return res.data}if (code === 401) {return Promise.reject('無效的會話,或者會話已過期,請重新登錄。')} else if (code === 402) {return Promise.reject(new Error(msg))} else if (code === 403) {return Promise.reject(new Error(msg))} else if (code === 500) {Notify({type: 'danger',message: msg});return Promise.reject(new Error(msg))} else if (code === 601) {Notify({type: 'warning',message: msg});return Promise.reject('error')} else if (code !== 200) {Dialog({title: '錯誤',message: msg});return Promise.reject('error')} else {return res.data}
}, error => {console.log('err' + error)let {message} = error;if (message == "Network Error") {message = "后端接口連接異常";} else if (message.includes("timeout")) {message = "系統接口請求超時";} else if (message.includes("Request failed with status code")) {message = "系統接口" + message.substr(message.length - 3) + "異常"; // 例如502異常// message = "系統更新服務中,請稍后重試";}// 彈出報錯信息Notify({message: message,type: 'danger',duration: 5 * 1000,});return Promise.reject(error)
}
)// 使用a標簽下載
export function fileDown(blobUrl, filename) {const a = document.createElement("a");if (!a.click) {throw new Error('DownloadManager: "a.click()" is not supported.');}a.href = blobUrl;a.target = "_parent";if ("download" in a) {a.download = filename;}(document.body || document.documentElement).append(a);a.click();a.remove();
}export default service
  • 上述代碼缺少一個getToken方法
  • 還缺少一個errorCode變量

不著急,慢慢來

2. 引入getToken方法

在utils文件夾下創建一個auth.js文件

import Cookies from 'js-cookie'const TokenKey = 'Admin-Token'export function getToken() {return Cookies.get(TokenKey)
}export function setToken(token) {// 設置60分鐘后過期const inFifteenMinutes = new Date(new Date().getTime() + 60 * 60 * 1000);return Cookies.set(TokenKey, token, { expires: inFifteenMinutes })
}export function removeToken() {return Cookies.remove(TokenKey)
}

這里需要安裝一個插件

npm install --save js-cookie

3. 引入errorCode變量

在utils文件夾下創建一個errorCode.js文件

export default {'401': '認證失敗,無法訪問系統資源','403': '當前操作沒有權限','404': '訪問資源不存在','default': '系統未知錯誤,請反饋給管理員'
}

4、設置env環境

1.創建本地環境dev

在src外面創建文件名為 .env.development

#模式
NODE_ENV = 'development'
#  // 通過"VUE_APP_MODE"變量來區分環境
VUE_APP_MODE = 'development'# 請求路徑
VUE_APP_BASE_API = '/dev-api'# 這是開發環境,未上線#		*******************			**   **		**
#			**		**			   ****************
#			**		**					**
#		*******************			   ************
#			**		**				  ***	    **
#			**		**				 **  **    **
#		   **		**				**	    ***
#		  **		**			   **	 **    ***

2.創建服務器環境prod

在src外面創建文件名為 .env.production

#模式
NODE_ENV = 'production'#通過"VUE_APP_MODE"變量來區分環境
VUE_APP_MODE = 'production'#api地址
VUE_APP_BASE_API = '/prod-api'# 這是上線環境,已投入使用

環境配置里面的VUE_APP_BASE_API為代理請求,可更改,這個東西看后端怎么調用或者修改吧
在這里插入圖片描述
例如我發起了一個列表請求,這個192.168.1.6是我的電腦ip,后端java的電腦ip例如是192.168.1.7

我就通過/dev-api請求到他的電腦上的接口

五、vue.config.js

與package.json同級

1. 創建vue.config.js

const webpack = require('webpack')
const path = require("path")const CompressionPlugin = require('compression-webpack-plugin')module.exports = {lintOnSave: false,devServer: {port: 8088,host: '0.0.0.0',open: true,proxy: {[process.env.VUE_APP_BASE_API]: {target: `http://192.168.1.66:8080`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}},},historyApiFallback: true, // 設置了當服務端收到 404 請求時,將會返回 index.html 文件},configureWebpack: {resolve: {alias: {'@': path.resolve(__dirname, 'src'),'assets': '@/assets'}},plugins: [// http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解壓縮靜態文件new CompressionPlugin({cache: false,                   // 不啟用文件緩存test: /\.(js|css|html)?$/i,     // 壓縮文件格式filename: '[path].gz[query]',   // 壓縮后的文件名algorithm: 'gzip',              // 使用gzip壓縮minRatio: 0.8                   // 壓縮率小于1才會壓縮}),// maxChunks:使用大于或等于 1 的值,來限制 chunk 的最大數量。使用 1 防止添加任何其他額外的 chunk,這是因為 entry/main chunk 也會包含在計數之中。//minChunkSize: 設置 chunk 的最小大小。// 限制打包的個數(減少打包生成的js文件和css文件)new webpack.optimize.LimitChunkCountPlugin({maxChunks: 10,minChunkSize: 100})],},publicPath: "/",assetsDir: './',assetsDir: 'static', // 整合css和js到這里outputDir: 'app', // 打包名稱,例如默認為dist
}

這一段代碼用到了compression-webpack-plugin ,項目中沒有,要進行安裝,否則會報紅

這個東西有版本問題,我直接下載了最新版10.0.0,結果項目運行不起來,然后我就找到了以前舊項目的版本

版本我已經指定好了,直接安裝即可。

npm install compression-webpack-plugin@5.0.2 --save-dev

安裝完了請檢查package.json中的配置
在這里插入圖片描述

由于vue的特性,修改env,vue.config.js,項目是需要重啟的。


2.修改后臺接口地址

在這里插入圖片描述
這個target,這里是你的本地的后臺java開發地址

六、編寫api請求

1.創建接口

在src目錄下創建一個文件夾【api】,在api下創建test.js用作測試,后續寫其他接口都是這樣
先集成在api文件夾里,然后再不同的vue頁面引入

import request from '@/utils/request'
// 查詢常用意見列表
export function listComment(query) {return request({url: '/flow/comment/list',method: 'get',params: query})
}
// 查詢常用意見詳細
export function getComment(id) {return request({url: '/flow/comment/' + id,method: 'get'})
}
// 新增常用意見
export function addComment(data) {return request({url: '/flow/comment',method: 'post',data: data})
}
// 修改常用意見
export function updateComment(data) {return request({url: '/flow/comment',method: 'put',data: data})
}
// 刪除常用意見
export function delComment(id) {return request({url: '/flow/comment/' + id,method: 'delete'})
}

在這里插入圖片描述

2.在vue頁面中引入api方法

在Home.vue頁面中引入

import { listComment } from "@/api/test.js"

在這里插入圖片描述
然后編寫methods方法,在created里面請求

<template><div class="home"><h1>這是h1標簽</h1><h2>這是h2標簽</h2><h3>這是h3標簽</h3><h4>這是h4標簽</h4><h5>這是h5標簽</h5><van-button type="primary">主要按鈕</van-button><van-button type="info">信息按鈕</van-button><van-button type="default">默認按鈕</van-button><van-button type="warning">警告按鈕</van-button><van-button type="danger">危險按鈕</van-button></div>
</template><script>
// @ is an alias to /srcimport { listComment } from "@/api/test.js"
export default {name: 'Home',components: {},data() {return {}},created() {this.getList()},methods: {// 獲取列表getList() {listComment().then(res => {})}}
}
</script>

打開f12控制臺,查看網絡請求
在這里插入圖片描述

在這里插入圖片描述
我這里已經請求到數據了


同理,引入該js中其他方法只需要往后面加就是了

import { listComment , ***list , ***del , ...... } from "@/api/test.js"

然后有不同的js需要分成不同的js包,如下圖
在這里插入圖片描述

七、bin腳本文件,一鍵運行

每次打開項目都需要手動去寫npm run serve,太麻煩了,這里集成了一個bin腳本
與src同級,建立一個文件夾,名字為bin
在這里插入圖片描述

1、打包 – build.bat

@echo off
echo.
echo [信息] 打包Web工程,生成dist文件。
echo.%~d0
cd %~dp0cd ..
npm run buildpause

2、下載依賴 – package.bat

@echo off
echo.
echo [信息] 安裝Web工程,生成node_modules文件。
echo.%~d0
cd %~dp0cd ..
npm install --registry=https://registry.npm.taobao.orgpause

3、運行 – run-web.bat

@echo off
echo.
echo [信息] 使用 Vue CLI 命令運行 Web 工程。
echo.%~d0
cd %~dp0cd ..
npm run servepause

在這里插入圖片描述
先建一個js然后寫進去再改后綴名,或者直接建這個名字然后用VSCode打開編輯。

雙擊即可運行,如果npm run dev是你的運行方式, 修改里面的server為dev就好了。

總結

gitee鏈接,已公開 傳送門

在這里插入圖片描述

很好的一個移動端項目腳手架,axios、環境、適配,都做好了。vuex這個可以用若依的,也可以自己寫

vuex有兩種,一種沒有子模塊,沒有子模塊的,直接在它的store/index.js里面寫。
如果有子模塊呢,就是子模塊引入到這個父模塊,父模塊在modules里面注冊一下。在vue頁面中引入就會多一層modules模塊。

下面這個就是我自己寫的,簡單版的,是有子模塊的。
vuex的多模塊用法簡單版

由于這個項目我建的時候選擇的是scss渲染器,所以不是less渲染器。重新建的時候選擇scss with dart-scss就好了,或者你裝了less再裝一下scss也行。全篇下來沒有寫到關于less或scss的代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/38059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2023牛客暑期多校訓練營9 B.Semi-Puzzle: Brain Storm

文章目錄 題目大意題解求解回溯 參考代碼 題目大意 給定兩個數 a , m a,m a,m &#xff0c;求滿足 a u ≡ u ( m o d m ) a^u \equiv u (mod\ \ m) au≡u(mod m) 的一個解。 ( 1 ≤ a , m ≤ 1 0 9 , 0 ≤ u ≤ 1 0 18 ) (1\leq a,m \leq10^9 ,0\leq u\leq 10^{18}) (1≤a…

玩賺音視頻開發高階技術——FFmpeg

隨著移動互聯網的普及&#xff0c;人們對音視頻內容的需求也不斷增加。無論是社交媒體平臺、電商平臺還是在線教育&#xff0c;都離不開音視頻的應用。這就為音視頻開發人員提供了廣闊的就業機會。根據這些年來網站上的音視頻開發招聘需求來看&#xff0c;音視頻開發人員的需求…

如何優雅的使用Mock Server

事出有因 昨天跟同事討論我們在用的rap2(一個集接口編寫和mock server的開源項目)和剛上線了一個easy-mock的server&#xff0c;到底哪個好用。 我們主要討論的點有個兩個&#xff1a; 接口的一致性、 編碼的無侵入性。 背景 自從前后端分離后&#xff0c;完成前后端的分工…

【計算機視覺|生成對抗】條件生成對抗網絡(CGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Conditional Generative Adversarial Nets 鏈接&#xff1a;[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成對抗網絡&#xff08;Generative Adversarial…

Windows 11 家庭中文版找不到組策略文件gpedit.msc

最近因為調整日期問題需要用到組策略文件gpedit.msc,但是發現找不到文件 在按鍵盤 winR 打開運行界面輸入 gpedit.msc 回車 Windows找不到文件’gpedit.msc’。請確定文件名是否正確后&#xff0c;再試-次。 檢查電腦Windows系統版本 是 Windows 11 家庭中文版 果斷早網上搜…

C++模板元編程入門案例

C++模板元編程(Template Metaprogramming)是一種在編譯時進行計算和代碼生成的技術,它使用C++的模板機制來實現。 下面是一個簡單的C++模板元編程的示例,展示了如何在編譯時計算一個數的階乘。 #include <iostream> template <int N> struct Factorial { …

docker 學習--02 常用命令

docker 學習–02 常用命令 文章目錄 docker 學習--02 常用命令1. 幫助啟動類命令1.1啟動docker1.2 停止docker1.3 重啟docker1.4 查看docker1.5 設置開機自啟1.6 查看docker概要信息1.7 查看docker總體幫助文檔1.8 查看docker命令幫助文檔 2. 鏡像命令2.1 列出本地主機上有的鏡…

Jmeter 參數化的幾種方法

目錄 配置元件-用戶自定義變量 前置處理器-用戶參數 配置元件-CSV Data Set Config Tools-函數助手 配置元件-用戶自定義變量 可在測試計劃、線程組、HTTP請求下創建用戶定義的變量 全局變量&#xff0c;可以跨線程組調用 jmeter執行的時候&#xff0c;只獲取一次&#xff0…

kafka 02——三個重要的kafka客戶端

kafka 02——三個重要的kafka客戶端 1. 前言1.1 關于 Kafka 的安裝1.2 常用客戶端簡介1.3 依賴 2. AdminClient2.1 Admin Configs2.2 AdminClient API2.2.1 設置 AdminClient 對象2.2.2 創建 topic 獲取 topic 列表2.2.3 刪除topic2.2.4 查看 topic 的描述信息2.2.5 查看 topi…

【復習8-13天】每天40min,我們一起用70天穩扎穩打學完《JavaEE初階》——14/70 第十四天

專注 效率 記憶 預習 筆記 復習 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區留言,一定盡快回復!(大家可以去看我的專欄,是所有文章的目錄)   文章字體風格: 紅色文字表示:重難點★? 藍色文字表示:思路以及想法★?   如果大家覺得有幫助的話,感謝大家幫忙 點…

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據 文章目錄 【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據前言出現的背景一、TDSQL-C數據庫是什么&#xff1f;二、TDSQL-C 的特點三、TDSQL-C的應用場景四、基于TD…

測試相關Liunx基礎知識

Linux的歷史和安裝 基本常識 Liunx目錄結果 常見

CTF之逆向之阿里巴巴

題目地址&#xff1a;http://www.shiyanbar.com/ctf/13 題目預覽&#xff1a; 解題過程&#xff1a; 1、下載附件發現是exe文件 2、使用PEid和Detect It Easy查殼 和 開發語言&#xff0c;發現沒有加殼&#xff0c;都是用C#開發的 3、C#和Java Python屬于解釋型語言&#xff…

Win10安裝GPU支持的最新版本的tensorflow

我在安裝好cuda和cudnn后&#xff0c;使用pip install tensorflow安裝的tensorflow都提示不能找到GPU&#xff0c; 為此懷疑默認暗轉的tensorflow是不帶GPU支持的。 在tensorflow官網提供了多個版本的GPU支持的windows的安裝包 https://www.tensorflow.org/install/pip?hlz…

用ChatGPT和六頂帽思考法幫助自己更好地決策和解決問題

當我們在解決復雜問題時&#xff0c;我們常常陷入單一視角的狀態。創造性思維領域的先驅愛德華德博諾&#xff0c;提出了六頂帽思考法[1]&#xff0c;這意味著我們可以從六個不同的視角來思考一個問題&#xff0c;以實現高水平決策和解決問題。 每一頂“帽子”代表不同的視角。…

阿里云國際版CDN使用教程!

當網站流量達到一定值后&#xff0c;勢必會造成網站訪問卡堵&#xff0c;這時候阿里云CDN將會一個很好的選擇&#xff0c;阿里云 CDN 是由全球分布式邊緣節點組成的虛擬網絡。阿里云 CDN 可減少源站負載&#xff0c;防止網絡擁塞&#xff0c;使用阿里云 CDN 加速圖像、小文件、…

SAP ME2L/ME2M/ME3M報表增強添加字段(包含:LMEREPI02、SE18:ES_BADI_ME_REPORTING)

ME2L、ME2M、ME3M這三個報表的字段增強&#xff0c;核心點都在同一個結構里 SE11:MEREP_OUTTAB_PURCHDOC 在這里加字段&#xff0c;如果要加的字段是EKKO、EKPO里的數據&#xff0c;直接加進去&#xff0c;啥都不用做&#xff0c;就完成了 如果要加的字段不在EKKO和EKPO這兩個…

LabVIEW控制通用工作臺

LabVIEW控制通用工作臺 用于教育目的的計算機化實驗室顯著增長&#xff0c;特別是用于運動控制的實驗室。它們代表了各種工業應用中不斷擴大的領域&#xff0c;并成為以安全的方式使用通常昂貴或獨特的實驗室設備進行實時實驗的寶貴工具。NI LabVIEW等軟件應用程序的開發和不斷…

Linux 中復制文件并保持修改時間等屬性

一、遇到的問題 Linux使用cp命令復制文件備份時&#xff0c;發現文件的修改時間變成當前時間了&#xff0c;想要保留備份文件原有的修改時間及其它文件屬性。 二、實現 1、cp命令 在 Linux 中&#xff0c;你可以使用 cp 命令來復制文件&#xff0c;并通過 -p 或 --preserve…

二進制轉字符串(小數)

題目&#xff1a; 給定一個介于0和1之間的實數&#xff08;如0.72&#xff09;&#xff0c;類型為double&#xff0c;打印它的二進制表達式。如果該數字無法精確地用32位以內的二進制表示&#xff0c;則打印“ERROR”。 示例: 輸入&#xff1a;0.625 輸出&#xff1a;"…