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 相关文章推荐
类似CSDN图片切换效果脚本
Sep 17 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
jquery获得页面元素的坐标值实现思路及代码
Apr 15 Javascript
脚本合并提升javascript性能示例
Feb 24 Javascript
教你使用javascript简单写一个页面模板引擎
May 05 Javascript
JQuery的attr 与 val区别
Jun 12 Javascript
JS中的作用域链
Mar 01 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
Jun 01 Javascript
浅谈react性能优化的方法
Sep 05 Javascript
使用Vue实现调用接口加载页面初始数据
Oct 28 Javascript
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 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
php5新改动之短标记启用方法
2008/09/11 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
php中ftp_chdir与ftp_cdup函数用法
2014/11/18 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
jQuery代码优化 事件委托篇
2011/11/01 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
微信小程序开发注意指南和优化实践(小结)
2019/06/21 Javascript
layui 对table中的数据进行转义的实例
2019/09/12 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
Flask框架踩坑之ajax跨域请求实现
2019/02/22 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
临床医学专业学生的自我评价分享
2013/11/21 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
单位创先争优活动方案
2014/01/26 职场文书
高一学生期末评语
2014/04/25 职场文书
给学校的建议书范文
2014/05/15 职场文书
化学专业自荐信
2014/05/28 职场文书
领导干部作风建设总结
2014/10/23 职场文书
邀请函样本
2015/02/02 职场文书
历史博物馆观后感
2015/06/05 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书
2019年七夕情人节浪漫祝福语大全!
2019/08/08 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python
Java基础-封装和继承
2021/07/02 Java/Android
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python