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学习之路(二)NPM模块管理
Jul 06 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
jQuery操作Table技巧大汇总
Jan 23 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
在Vue.js中使用Mixins的方法
Sep 12 Javascript
webpack写jquery插件的环境配置
Dec 21 jQuery
在vue中使用css modules替代scroped的方法
Mar 10 Javascript
基于React+Redux的SSR实现方法
Jul 03 Javascript
微信小程序支付前端源码
Aug 29 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
JS实现扫雷项目总结
May 19 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
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
php 使用file_get_contents读取大文件的方法
2014/11/13 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
执行iframe中的javascript方法
2008/10/07 Javascript
js利用div背景,做一个竖线的效果。
2008/11/22 Javascript
jquery实用代码片段集合
2010/08/12 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
详解如何实现一个简单的 vuex
2018/02/10 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
python 统计代码行数简单实例
2017/05/04 Python
基于DataFrame改变列类型的方法
2018/07/25 Python
python贪吃蛇游戏代码
2020/04/18 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
Python批量获取并保存手机号归属地和运营商的示例
2020/10/09 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
如何强制垃圾回收
2015/10/06 面试题
自我评价200字分享
2013/12/17 职场文书
大学生村官任职感言
2014/01/09 职场文书
六十大寿答谢词
2014/01/12 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
大学毕业感言100字
2014/02/03 职场文书
租房协议书范本
2014/04/09 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书