Vue自定义指令上报Google Analytics事件统计的方法


Posted in Javascript onFebruary 25, 2019

发现问题

一般前端开发离不开数据统计,我们经常需要接入统计服务以方便运营,例如现在需要统计一个按钮

<template>
 <button @click="handleClick" />
</template>

<script>
export default {
 methods: {
 handleClick() {
 window.alert('button click')
 }
 }
}
</script>

引入 ga 后是这样上报的

handleClick() {
 window.alert('button click')

 const params = {
 hitType: 'event',
 eventCategory: 'button',
 eventAction: 'click',
 eventLabel: 'click label'
 }

 window.ga('send', params)
}

很简单!

但当页面的按钮增加,我们几乎要在所有 handle 事件里侵入统计代码,和业务逻辑混在一起

不够优雅!

怎么优雅

我们尝试利用 Vue 的指令来自定义统计,这是我最终想要的统计方式

只需要在 template 里声明好统计参数,用户点击则触发上报

<template>
 <button @click="handleClick"
  v-ga="{
  eventCategory: 'button',
  eventLabel: 'button click'
  }" />
</template>

抽离统计

将上报统计代码单独个方法出来

./services/analyst.js

export function send(data = {}) {
 const params = {
 hitType: 'event',
 eventCategory: 'button',
 eventAction: 'click',
 eventLabel: 'click label'
 }

 window.ga('send', Object.assign({}, params, data))
}

编写指令

监听带有 v-ga 指令的元素,统一处理上报

./plugins/analyst.js

import * as analyst from './services/analyst'

const plugin = Vue => {
 Vue.directive('ga', {
 bind(el, binding) {
 el.addEventListener('click', () => {
 // binding.value 拿到 v-ga 指令的参数
 analyst.send(binding.value)
 })
 },

 unbind(el) {
 el.removeEventListener('click', () => {})
 }
 })
}

export default plugin

最终调用

import Vue from 'vue'
import GaPlugin from './plugins/analyst'

Vue.use(GaPlugin)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js版本A*寻路算法
Dec 22 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
Dec 28 Javascript
2则自己编写的jQuery特效分享
Feb 26 Javascript
angular2倒计时组件使用详解
Jan 12 Javascript
js 数字、字符串、布尔值的转换方法(必看)
Apr 07 Javascript
20个最常见的jQuery面试问题及答案
May 23 jQuery
微信小程序获取音频时长与实时获取播放进度问题
Aug 28 Javascript
Vue从TodoList中学父子组件通信
Feb 05 Javascript
详解基于原生JS验证表单组件xy-form
Aug 20 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
Aug 07 Javascript
vue3.0 数字翻牌组件的使用方法详解
Apr 20 Vue.js
写一个Vue Popup组件
Feb 25 #Javascript
利用Webpack实现小程序多项目管理的方法
Feb 25 #Javascript
JavaScript中构造函数与原型链之间的关系详解
Feb 25 #Javascript
JavaScript中的事件与异常捕获详析
Feb 24 #Javascript
Vue 组件注册实例详解
Feb 23 #Javascript
Vue Prop属性功能与用法实例详解
Feb 23 #Javascript
Vue自定义属性实例分析
Feb 23 #Javascript
You might like
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
CI框架附属类用法分析
2018/12/26 PHP
php实现的顺序线性表示例
2019/05/04 PHP
laravel5.2表单验证,并显示错误信息的实例
2019/09/29 PHP
js window.event对象详尽解析
2009/02/17 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
jQuery插件Tooltipster实现漂亮的工具提示
2015/04/12 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
js数组常用操作方法小结(增加,删除,合并,分割等)
2016/08/02 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
js时间转换毫秒的实例代码
2019/08/21 Javascript
解决Angularjs异步操作后台请求用$q.all排列先后顺序问题
2019/11/29 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
python 读取文件并替换字段的实例
2018/07/12 Python
python3.6数独问题的解决
2019/01/21 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
Python调用shell cmd方法代码示例解析
2020/06/18 Python
python源文件的字符编码知识点详解
2021/03/04 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
美国最受欢迎的童装品牌之一:The Children’s Place
2016/07/23 全球购物
Tory Burch德国官网:美国时尚生活品牌
2018/01/03 全球购物
英国外籍人士的在线超市:British Corner Shop
2019/06/03 全球购物
保密工作实施方案
2014/02/24 职场文书
学校教研活动总结
2014/07/02 职场文书
应届生面试求职信
2014/07/02 职场文书
公司客户答谢酒会祝酒词
2015/08/11 职场文书
python3实现无权最短路径的方法
2021/05/12 Python
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js