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 相关文章推荐
Node.js文件操作详解
Aug 16 Javascript
一个css与js结合的下拉菜单支持主流浏览器
Oct 08 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
基于jquery实现轮播特效
Apr 22 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
Mongoose实现虚拟字段查询的方法详解
Aug 15 Javascript
JavaScript中使用参数个数实现重载功能
Sep 01 Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
Aug 14 Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 Javascript
写一个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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
php递归遍历多维数组的方法
2015/04/18 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
Jquery 自定义动画概述及示例
2013/03/29 Javascript
jQuery操作checkbox选择(list/table)
2013/04/07 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
2018/03/29 Javascript
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
python 实现绘制整齐的表格
2019/11/18 Python
YUV转为jpg图像的实现
2019/12/09 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
python可视化text()函数使用详解
2020/02/11 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
东方电视购物:东方CJ
2016/10/12 全球购物
大学毕业生个人自荐信范文
2014/01/08 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
2014年外联部工作总结
2014/11/17 职场文书
2014年仓库管理工作总结
2014/12/17 职场文书
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript