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 相关文章推荐
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
判断数组的最佳方法(推荐)
Oct 11 Javascript
基于Vue如何封装分页组件
Dec 16 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
更改BootStrap popover的默认样式及popover简单用法
Sep 13 Javascript
vue+element-ui实现表格编辑的三种实现方式
Oct 31 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
微信小程序动画组件使用解析,类似vue,且更强大
Aug 01 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
jQuery实现滑动开关效果
Aug 02 jQuery
写一个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
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php服务器的系统详解
2019/10/12 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
vue实现随机验证码功能的实例代码
2019/04/30 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
mac安装scrapy并创建项目的实例讲解
2018/06/13 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
Python面向对象中类(class)的简单理解与用法分析
2020/02/21 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
二年级数学教学反思
2014/01/21 职场文书
校园十大歌手策划书
2014/02/01 职场文书
班子四风对照检查材料
2014/08/21 职场文书
意向协议书
2015/01/27 职场文书
检讨书格式范文
2015/05/07 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
西游降魔篇观后感
2015/06/15 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
2019广播稿怎么写
2019/04/17 职场文书
div与span之间的区别与使用介绍
2021/12/06 HTML / CSS