最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3實現(xiàn)全局公共函數(shù)的完整方案(創(chuàng)建、掛載、引用、使用)

 更新時間:2026年03月15日 08:20:41   作者:還是大劍師蘭特  
本文詳細(xì)介紹了如何在Vue3項目中創(chuàng)建、掛載、引用和使用全局公共函數(shù),包括標(biāo)準(zhǔn)目錄結(jié)構(gòu)、創(chuàng)建公共函數(shù)、全局注冊、頁面使用以及規(guī)范,通過本文,新手開發(fā)者可以快速搭建企業(yè)級規(guī)范工具庫,需要的朋友可以參考下

給你最標(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.$utils
  • proxy.$utils
  • getCurrentInstance().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
  • 頁面直接 importproxy.$utils
  • 你的地圖、過濾、格式化全部能全局復(fù)用

以上就是Vue3實現(xiàn)全局公共函數(shù)的完整方案(創(chuàng)建、掛載、引用、使用)的詳細(xì)內(nèi)容,更多關(guān)于Vue3全局公共函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue之Vue.use的使用場景及說明

    vue之Vue.use的使用場景及說明

    這篇文章主要介紹了vue之Vue.use的使用場景,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Vue解決echart在element的tab切換時顯示不正確問題

    Vue解決echart在element的tab切換時顯示不正確問題

    這篇文章主要介紹了Vue解決echart在element的tab切換時顯示不正確問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • VUE + OPENLAYERS實現(xiàn)實時定位功能

    VUE + OPENLAYERS實現(xiàn)實時定位功能

    本系列文章介紹一個簡單的實時定位示例,基于VUE + OPENLAYERS實現(xiàn)實時定位功能,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-09-09
  • Vue配置文件中的devServer proxy配置全過程

    Vue配置文件中的devServer proxy配置全過程

    文章介紹了如何在代理服務(wù)器中配置axios請求,包括單個接口和多個接口的情況,通過配置proxy,可以將請求轉(zhuǎn)發(fā)到不同的后端服務(wù)器,并且可以處理跨域請求和路徑重寫
    2025-12-12
  • vue實現(xiàn)在一個方法執(zhí)行完后執(zhí)行另一個方法的示例

    vue實現(xiàn)在一個方法執(zhí)行完后執(zhí)行另一個方法的示例

    今天小編就為大家分享一篇vue實現(xiàn)在一個方法執(zhí)行完后執(zhí)行另一個方法的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 八個Vue中常用的v指令詳解

    八個Vue中常用的v指令詳解

    vue常用指令有v-once指令、v-show指令、v-if指令、v-else指令、v-else-if指令、v-for指令、v-html指令、v-text指令、v-bind指令、v-on指令、v-model指令等等,下面這篇文章主要給大家介紹了八個Vue中常用的v指令的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Vue3中實現(xiàn)拖拽和縮放自定義看板 vue-grid-layout的方法

    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)的過程詳解

    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
  • 如何基于Vue3封裝一個好用的Websocket

    如何基于Vue3封裝一個好用的Websocket

    這篇文章主要給大家介紹了關(guān)于如何基于Vue3封裝一個好用的Websocket的相關(guān)資料,在Vue3中我們可以將Websocket類封裝成一個Vue插件,以便全局使用,需要的朋友可以參考下
    2023-09-09
  • 一文詳析vue3?Props的用法(父傳子)

    一文詳析vue3?Props的用法(父傳子)

    這篇文章主要給大家介紹了關(guān)于vue3?Props的用法(父傳子)的相關(guān)資料,在Vue3中Props用于組件間數(shù)據(jù)傳遞,允許類型檢查和默認(rèn)值設(shè)置,文中將用法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-10-10

最新評論

阳曲县| 柯坪县| 许昌县| 康定县| 安乡县| 张家港市| 同江市| 新泰市| 侯马市| 花莲县| 华亭县| 陆川县| 台湾省| 青州市| 美姑县| 尼玛县| 凤山市| 南皮县| 安仁县| 宣汉县| 海南省| 北辰区| 南京市| 中超| 滦南县| 萝北县| 龙南县| 六枝特区| 太保市| 手游| 阆中市| 平凉市| 邵阳市| 石家庄市| 阿巴嘎旗| 溧阳市| 双江| 化隆| 岳阳市| 阳曲县| 公主岭市|