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

Vue3中埋點指令封裝詳解

 更新時間:2023年08月01日 15:34:43   作者:樂嫣  
對于Vue項目來說,如果遇到一個埋點的需求,我們最好的解決方案就是封裝一個指令,所以本文就來和大家詳細講講具體是如何封裝埋點指令的吧

前言

對于Vue項目來說,如果遇到一個埋點的需求,我們最好的解決方案就是封裝一個指令,然后再有埋點需求的地方使用,接下來就來封裝一個埋點指令吧。

代碼實現(xiàn)

track.ts文件

import HttpAxios from '@/utils/axios'
?
//定義埋點請求
export function track(params) {
 ?return HttpAxios.post(
 ? ?'http://xxxxxx.xxxxx',
 ? ?params,
 ?  {
 ? ? ?isCloseLoading: true
 ?  }
  )
}
?
export default {
 ?install(Vue, options) {
 ? ?options = options || {}
 ? ?/**
 ? ? * 格式化綁定到dom上的數(shù)據(jù)
 ? ? * @param {*} binding
 ? ? */
 ? ?function formatBinding(binding) {
 ? ? ?let trackData = ''
 ? ? ?let eventMode = 'click'
 ? ? ?if (typeof binding.value === 'object') {
 ? ? ? ?if ('event' in binding.value) {
 ? ? ? ? ?eventMode = binding.value.event
 ? ? ?  }
 ? ? ? ?if ('data' in binding.value) {
 ? ? ? ? ?trackData = binding.value.data
 ? ? ?  } else {
 ? ? ? ? ?trackData = binding.value
 ? ? ?  }
 ? ?  } else {
 ? ? ? ?trackData = binding.value
 ? ?  }
 ? ? ?return {
 ? ? ? ?eventMode,
 ? ? ? ?trackData
 ? ?  }
 ?  }
 ? ?// 初始化
 ? ?if ('init' in options && options.init instanceof Function) {
 ? ? ?try {
 ? ? ? ?options.init()
 ? ?  } catch (error) {
 ? ? ? ?if (options.debug) {
 ? ? ? ? ?console.log(error)
 ? ? ?  }
 ? ?  }
 ?  }
 ? ?Vue.directive('track', {
 ? ? ?mounted(el, binding) {
 ? ? ? ?const format = formatBinding(binding)
 ? ? ? ?el.trackData = format.trackData
 ? ? ? ?const params = {
 ? ? ? ? ?systemName: options.systemName,
 ? ? ? ? ?...el.trackData //指令綁定的數(shù)據(jù)
 ? ? ?  }
 ? ? ? ?el.addEventListener(format.eventMode, e => {
 ? ? ? ? ?try {
 ? ? ? ? ? ?if ('callback' in options && options.callback instanceof Function) {
 ? ? ? ? ? ? ?options.callback(params)
 ? ? ? ? ?  } else {
 ? ? ? ? ? ? ?// 若未定義回調(diào)函數(shù),則默認調(diào)用track方法
 ? ? ? ? ? ? ?track(params)
 ? ? ? ? ?  }
 ? ? ? ? ? ?if (options.debug) {
 ? ? ? ? ? ? ?console.log(el.trackData)
 ? ? ? ? ?  }
 ? ? ? ?  } catch (error) {
 ? ? ? ? ? ?if (options.debug) {
 ? ? ? ? ? ? ?console.log(error)
 ? ? ? ? ?  }
 ? ? ? ?  }
 ? ? ?  })
 ? ?  },
 ? ? ?update(el, binding) {
 ? ? ? ?const format = formatBinding(binding)
 ? ? ? ?el.trackData = format.trackData
 ? ?  }
 ?  })
  }
}

main.ts文件

// 引入埋點
import VTrack from '@monorepo/shared/utils/track'
?
// 創(chuàng)建vue實例
const app = createApp(App)
?
// 1.掛載埋點,沒有回調(diào)函數(shù)的方式
app.use(VTrack, { systemName: '基礎(chǔ)平臺', debug: false })
?
// 2.掛載埋點,回調(diào)函數(shù)的方式
app.use(VTrack, {
 ?callback(data, e) {
 ? ?//可以自定義埋點請求
 ? ?console.log(data, e);
  },
 ?systemName: '基礎(chǔ)平臺',
 ?debug: false,
});

使用:

<template>
 ?<button v-track="{ menuName: '按鈕' }">DEBUG</button>
</template>

關(guān)于指令項目規(guī)范化

src目錄下,創(chuàng)建directives文件夾存放該項目所需的指令,如圖所示:

index.ts文件統(tǒng)一注冊指令:

import type { App } from 'vue'
import { hasRole } from './permission/hasRole'
import { hasPermi } from './permission/hasPermi'
?
/**
 * 導(dǎo)出指令:v-xxx
 * @methods hasRole 用戶權(quán)限,用法: v-hasRole
 * @methods hasPermi 按鈕權(quán)限,用法: v-hasPermi
 */
export const setupAuth = (app: App<Element>) => {
 ?hasRole(app)
 ?hasPermi(app)
}

main.ts文件

// 指令
import * as directives from '@/directives'
?
// 創(chuàng)建vue實例
const app = createApp(App)
?
// 注冊指令
for (const key in directives) {
 ?directives[key](app)
}

以上就是Vue3中埋點指令封裝詳解的詳細內(nèi)容,更多關(guān)于Vue3埋點指令封裝的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue實現(xiàn)項目部署到非根目錄及解決刷新頁面時找不到資源

    Vue實現(xiàn)項目部署到非根目錄及解決刷新頁面時找不到資源

    這篇文章主要介紹了Vue實現(xiàn)項目部署到非根目錄及解決刷新頁面時找不到資源問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 淺談VUE-CLI腳手架熱更新太慢的原因和解決方法

    淺談VUE-CLI腳手架熱更新太慢的原因和解決方法

    今天小編就為大家分享一篇淺談VUE-CLI腳手架熱更新太慢的原因和解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue加載自定義的js文件方法

    vue加載自定義的js文件方法

    下面小編就為大家分享一篇vue加載自定義的js文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue 1.0 結(jié)合animate.css定義動畫效果

    vue 1.0 結(jié)合animate.css定義動畫效果

    本文分步驟給大家介紹了Vue 1.0自定義動畫效果,vue1.0代碼結(jié)合animate.css定義動畫,頁面一定要引入animate.cdd,具體實例代碼大家參考下本文
    2018-07-07
  • vue3 銷毀組件方法及問題解決方案

    vue3 銷毀組件方法及問題解決方案

    這篇文章主要介紹了vue3 銷毀組件方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue3+ts項目之安裝eslint、prettier和sass的詳細過程

    vue3+ts項目之安裝eslint、prettier和sass的詳細過程

    這篇文章主要介紹了vue3+ts項目02-安裝eslint、prettier和sass的詳細過程,在本文講解中需要注意執(zhí)行yarn format會自動格式化css、js、html、json還有markdown代碼,需要的朋友可以參考下
    2023-10-10
  • 一文詳解Vue中過濾器filters的使用

    一文詳解Vue中過濾器filters的使用

    Vue.js允許自定義過濾器,過濾器的作用可被用于一些常見的文本格式化(也就是修飾文本,但是文本內(nèi)容不會改變),本文主要來和大家講講過濾器filters的使用,感興趣的可以了解一下
    2023-04-04
  • vue3 setup中defineEmits與defineProps的使用案例詳解

    vue3 setup中defineEmits與defineProps的使用案例詳解

    在父組件中定義String、Number、Boolean、Array、Object、Date、Function、Symbol這些類型的數(shù)據(jù),使用defineEmits會返回一個方法,使用一個變量emits(變量名隨意)去接收,本文給大家介紹vue3 setup中defineEmits與defineProps的使用案例,感興趣的朋友一起看看吧
    2023-10-10
  • Vue 加載遠程組件的解決方案

    Vue 加載遠程組件的解決方案

    最近的項目有一個加載遠程組件的需求,基于此我對 Vue 加載遠程組件的方案進行了研究,并且整理了兩個可行的解決方案,有感興趣的小伙伴跟著小編一起來看看吧
    2023-07-07
  • 關(guān)于element同時使用Drawer和Dialog出現(xiàn)多個遮罩問題

    關(guān)于element同時使用Drawer和Dialog出現(xiàn)多個遮罩問題

    這篇文章主要介紹了關(guān)于element同時使用Drawer和Dialog出現(xiàn)多個遮罩問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

普格县| 永州市| 广饶县| 云龙县| 安新县| 久治县| 木兰县| 城步| 仪陇县| 阳新县| 嘉荫县| 都兰县| 太仆寺旗| 松溪县| 康马县| 阳城县| 潢川县| 高台县| 新野县| 深州市| 霍林郭勒市| 收藏| 新野县| 澄迈县| 陆丰市| 台北市| 武强县| 琼海市| 曲松县| 贵港市| 乐都县| 灵山县| 高淳县| 两当县| 柯坪县| 蒲江县| 星子县| 阿鲁科尔沁旗| 廉江市| 宁波市| 南华县|