Vue3實現(xiàn)全局公共函數(shù)的完整方案(創(chuàng)建、掛載、引用、使用)
給你最標(biāo)準(zhǔn)、企業(yè)級、新手一看就會的全局函數(shù)方案,包含:文件夾位置 → 創(chuàng)建方法 → 全局注冊 → 頁面使用 → 實戰(zhàn)示例。把 文件夾規(guī)范、注冊、引用、頁面使用、注意事項、實戰(zhàn)場景全部一次性講透,你照著做就能搭建企業(yè)級規(guī)范工具庫。
一、標(biāo)準(zhǔn)目錄結(jié)構(gòu)(必須這樣建)
src/ ├── utils/ 【工具函數(shù)根目錄】 │ ├── index.js 【主入口:統(tǒng)一導(dǎo)出所有函數(shù)】 │ ├── olUtils.js 【分文件:OpenLayers地圖專用工具】 │ ├── format.js 【分文件:格式化工具】 │ └── filter.js 【分文件:數(shù)據(jù)過濾工具】 ├── main.js 【全局注冊入口】 └── src/xxx.vue 業(yè)務(wù)頁面
為什么要分文件?
- 函數(shù)多了不會亂
- 按需加載,性能更好
- 團(tuán)隊協(xié)作清晰
- 維護(hù)方便
二、第一步:創(chuàng)建公共函數(shù)
1. 創(chuàng)建地圖工具:src/utils/olUtils.js
// OpenLayers SVG 圖標(biāo)生成
export function getSvgMarker(color = '#ff4400') {
return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" fill="${color}" stroke="#fff" stroke-width="5"/>
</svg>`.replace(/\s+/g, '')
}
// 坐標(biāo)轉(zhuǎn)換
export function wgs84ToMercator(lon, lat) {
return import.meta.env.VITE_APP_PROJECTION === 'EPSG:3857'
? [lon, lat]
: fromLonLat([lon, lat])
}2. 創(chuàng)建數(shù)據(jù)過濾工具:src/utils/filter.js
// 根據(jù)配置 isShow 過濾對象字段
export function filterByShowConfig(data, config) {
const result = {}
for (const key in data) {
if (config[key] && config[key].isShow === true) {
result[key] = data[key]
}
}
return result
}
3. 統(tǒng)一出口:src/utils/index.js
// 統(tǒng)一導(dǎo)出所有工具函數(shù) export * from './olUtils' export * from './filter'
三、第二步:全局注冊(兩種方式)
方式1:掛載到全局(所有頁面不用 import)
main.js
import { createApp } from 'vue'
import App from './App.vue'
import * as $utils from './utils/index' // 引入
const app = createApp(App)
app.config.globalProperties.$utils = $utils // 全局掛載
app.mount('#app')
掛載后全局可訪問:
this.$utilsproxy.$utilsgetCurrentInstance().proxy.$utils
方式2:配置路徑別名(最舒服)
vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
export default defineConfig({
plugins: [vue()],
resolve: {
alias: {
'@': path.resolve(__dirname, 'src'),
'@utils': path.resolve(__dirname, 'src/utils')
}
}
})
之后可以這樣引用:
import { getSvgMarker } from '@utils'
四、第三步:在頁面中如何使用?(三種用法)
用法1:<script setup>最推薦(直接 import)
<script setup>
// 直接導(dǎo)入需要的函數(shù)
import { getSvgMarker, filterByShowConfig } from '@utils'
// 使用 SVG
const marker = getSvgMarker('blue')
// 使用數(shù)據(jù)過濾
const A = {}
const B = {}
const filteredData = filterByShowConfig(A, B)
</script>
用法2:使用全局掛載(不用 import)
<script setup>
import { getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
// 直接使用全局函數(shù)
const icon = proxy.$utils.getSvgMarker('red')
const result = proxy.$utils.filterByShowConfig(A, B)
</script>
用法3:選項式 API
<script>
export default {
mounted() {
const icon = this.$utils.getSvgMarker('green')
}
}
</script>
五、全局函數(shù)使用規(guī)范(企業(yè)級)
1. 工具函數(shù)必須:
- 純函數(shù)(不修改外部變量)
- 獨(dú)立功能
- 有注釋
- 有默認(rèn)參數(shù)
- 支持復(fù)用
2. 哪些功能適合寫進(jìn)全局工具?
- 數(shù)據(jù)格式化
- 字段過濾
- OpenLayers 樣式、圖標(biāo)、坐標(biāo)轉(zhuǎn)換
- 防抖、節(jié)流
- 時間、金額格式化
- 經(jīng)緯度處理
- 地圖通用方法
- 表單校驗
3. 不適合寫進(jìn)全局:
- 頁面私有邏輯
- 接口請求(放 api 文件夾)
- 狀態(tài)管理(放 store)
六、給你一套直接放進(jìn)你項目的終極模板
1.src/utils/olUtils.js(地圖圖標(biāo)、坐標(biāo))
import { fromLonLat } from 'ol/proj'
// SVG 地圖標(biāo)點
export function getSvgIcon(color = '#ff4400') {
return `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32"><circle cx="16" cy="16" r="14" fill="${color}" stroke="#fff" stroke-width="2"/></svg>`
}
// 坐標(biāo)轉(zhuǎn)墨卡托
export function toMercator(lon, lat) {
return fromLonLat([Number(lon), Number(lat)])
}
2.src/utils/filter.js(你的字段過濾)
export function filterByConfig(data, config) {
let res = {}
for (let k in data) {
if (config[k]?.isShow) res[k] = data[k]
}
return res
}
3.src/utils/index.js
export * from './olUtils' export * from './filter'
4.main.js
import * as $utils from './utils' app.config.globalProperties.$utils = $utils
5. 任意頁面使用
<script setup>
import { getSvgIcon, filterByConfig } from '@utils'
// 地圖圖標(biāo)
const icon = getSvgIcon('#0088ff')
// 數(shù)據(jù)過濾
const filtered = filterByConfig(A, B)
</script>
七、一句話總結(jié)(最關(guān)鍵)
- 公共函數(shù)放
src/utils/ - 統(tǒng)一導(dǎo)出
index.js - 全局掛載
main.js→$utils - 頁面直接
import或proxy.$utils - 你的地圖、過濾、格式化全部能全局復(fù)用
以上就是Vue3實現(xiàn)全局公共函數(shù)的完整方案(創(chuàng)建、掛載、引用、使用)的詳細(xì)內(nèi)容,更多關(guān)于Vue3全局公共函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue解決echart在element的tab切換時顯示不正確問題
這篇文章主要介紹了Vue解決echart在element的tab切換時顯示不正確問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
VUE + OPENLAYERS實現(xiàn)實時定位功能
本系列文章介紹一個簡單的實時定位示例,基于VUE + OPENLAYERS實現(xiàn)實時定位功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-09-09
vue實現(xiàn)在一個方法執(zhí)行完后執(zhí)行另一個方法的示例
今天小編就為大家分享一篇vue實現(xiàn)在一個方法執(zhí)行完后執(zhí)行另一個方法的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Vue3中實現(xiàn)拖拽和縮放自定義看板 vue-grid-layout的方法
這篇文章主要介紹了Vue3中實現(xiàn)拖拽和縮放自定義看板 vue-grid-layout的方法,本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
Vue3中element-plus全局使用Icon圖標(biāo)的過程詳解
我們在用vue開發(fā)網(wǎng)站的時候,往往圖標(biāo)是起著很重要的作,這篇文章主要給大家介紹了關(guān)于Vue3中element-plus全局使用Icon圖標(biāo)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01

