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 相关文章推荐
Prototype使用指南之selector.js说明
Oct 26 Javascript
javascript 冒泡排序 正序和倒序实现代码
Dec 14 Javascript
js文件缓存之版本管理详解
Jul 05 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
jQuery实现的多选框多级联动插件
May 02 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
js仿百度音乐全选操作
Jan 13 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
JavaScript实现的贝塞尔曲线算法简单示例
Jan 30 Javascript
安装多版本Vue-CLI的实现方法
Mar 24 Javascript
vue选项卡切换的实现案例
Apr 11 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
php调用mysql存储过程
2007/02/14 PHP
优化php效率,提高php性能的一些方法
2011/03/24 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
PHP在线书签系统分享
2016/01/04 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
LNMP部署laravel以及xhprof安装使用教程
2017/09/14 PHP
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JQuery获取样式中的background-color颜色值的问题
2013/08/20 Javascript
JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)
2013/11/13 Javascript
javascript的列表切换【实现代码】
2016/05/03 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
Angular多选、全选、批量选择操作实例代码
2017/03/10 Javascript
Vuejs 实现简易 todoList 功能 与 组件实例代码
2018/09/10 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
JavaScript面试技巧之数组的一些不low操作
2019/03/22 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
2015/04/08 Python
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Django实现跨域请求过程详解
2019/07/25 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
C# Debug和Testing相关面试题
2015/10/25 面试题
成教自我鉴定
2013/10/27 职场文书
农民入党思想汇报
2014/01/03 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
应届毕业生自荐信
2014/05/28 职场文书
英语导游词
2015/02/13 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
python实现的web监控系统
2021/04/27 Python
使用Django实现商城验证码模块的方法
2021/06/01 Python
vue使用element-ui按需引入
2022/05/20 Vue.js