如何在Vue單頁面中進行業務數據的上報
概述
業務數據的上報主要分為:
- 各個路由的PV上報;
- 用戶的點擊行為上報;
- 用戶操作結果(分享是否成功)的數據上報等;
通用和必須上報的數據,均在上報的代碼中進行固定,比如設備信息、用戶信息、cookie等都需要上報的數據,在上報前處理完成,需要異步獲取且數據固定的,做好存儲,防止每次都要重新獲取;其他額外的數據,通過對外暴露的send
方法進行傳遞。
比如獲取信息這塊,客戶端給到的jsapi,有可能隻能異步調用,那麼我們就可以這麼處理:
function getAppInfo() { let appInfo = {}; return ()=> { if (appInfo.deviceId) { return Promise.resolve(appInfo); } else { return new Promise((resolve, reject) => { ABB.getAppInfo(info => { if (info.deviceId) { appInfo = info; resolve(appInfo); } else { reject(new Error('get AppInfo error')); } }) }) } } } const AppInfo = getAppInfo(); console.log( AppInfo() );
1. 各個路由的PV上報
各個路由的PV上報可以通過vue router的afterEach來實現,每次路由刷新時,afterEach方法都會執行,那麼我們在這裡進行PV的上報:
// 每個hash路由的PV上報 router.afterEach((to)=>{ // to為當前已打開的頁面,to.name為在router/index.ts中設定的name dataBoss.sendPV(to.name); })
2. 用戶點擊行為的上報
用戶點擊行為的上報,之前是在每個點擊的業務代碼最後,進行一次點擊上報。不過這樣一個不好的地方是,必須為每個需要上報的點擊元素添加一段業務代碼,同時,如果多個點擊行為共享某個業務片段時,需要進行點擊區分:
methods: { myClick(value, prarams, act) { // ... 業務邏輯的處理 // 數據的上報 wzp.send({ act: act, pageSource: 'MainPage' }) } }
現在,我們利用Vue中的自定義指令來實現點擊行為的上報,上報的處理與業務代碼進行分割:
// 自定義指令的官方文檔: https://cn.vuejs.org/v2/guide/custom-directive.html // 自定義boss指令 // bind: 隻對該元素綁定一次 // el: 觸發時的DOM元素 // binding.value: 傳入的值 // 使用 v-boss="{page: 'MainPage', sop: 'donate'}" Vue.directive('boss', { // bind: function (el: HTMLElement, binding: any) { el.addEventListener('click', ()=>{ // 綁定click事件,觸發後進行數據上報 Vue.prototype.$dataBoss.send(binding.value) }) } })
自定義v-boss指令後,我們就可以在元素上使用這個指令後:
<!-- 為用戶頭像添加點擊數據上報 --> <div class="avatar" v-boss="{pageName: 'MainPage', sop: 'sop_own_click'}" @click="linkTo"> <img :src="user.avatar" :alt="user.nickname"> </div>
3. 用戶操作結果的數據上報
這裡的數據上報是用戶點擊行為之後的結果上報,比如用戶點擊瞭分享按鈕,那麼最終他是真的分享成功瞭,還是中途又取消瞭。這種數據的上報,可以分析出用戶從意圖操作到最終實現的一個流失情況。
操作結果的數據上報,依賴於客戶端或者接口給反饋的結果,這就需要在業務代碼中實現瞭,定義一個全局變量$dataBoss,通過這個來上報數據:
比如分享是否成功的監控:
// 發起分享 handleShare() { share.show(); share.on('shareResult', res => { this.$dataBoss.send({ sop: 'share_success' }); }) }
根據接口中的數據進行上報:
handleUser() { jsonp(url).then(result => { this.$dataBoss.send({ kv: { money: 20 } }); }) }
總結
前端數據上報的維度很多,都是為瞭方便我們更加的瞭解用戶、瞭解產品,方便以後的功能迭代。
以上就是如何在Vue單頁面中進行業務數據的上報的詳細內容,更多關於Vue單頁面中進行業務數據的上報的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- 快速理解Vue路由導航守衛
- 使用 JavaScript Promise 讀取 Github 用戶數據
- 淺析Promise的介紹及基本用法
- vue的路由守衛和keep-alive後生命周期詳解
- vue中Promise的使用方法詳情