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 相关文章推荐
Jquey拖拽控件Draggable使用方法(asp.net环境)
Sep 28 Javascript
javascript之querySelector和querySelectorAll使用说明
Oct 09 Javascript
JavaScript对数字的判断与处理实例分析
Feb 02 Javascript
jquery中ajax使用error调试错误的方法
Feb 08 Javascript
vue.js的安装方法
May 12 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
vue实现自定义日期组件功能的实例代码
Nov 06 Javascript
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
vue视图不更新情况详解
May 16 Javascript
微信小程序实现搜索功能
Mar 10 Javascript
解决vue项目打包上服务器显示404错误,本地没出错的问题
Nov 03 Javascript
vue-cli4.5.x快速搭建项目
May 30 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统计二维数组元素个数的方法
2013/11/12 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
php集成动态口令认证
2016/07/21 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
javascript EXCEL 操作类代码
2009/07/30 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
js 函数调用模式小结
2011/12/26 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
jQuery的css()方法用法实例
2014/12/24 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
python中单下划线_的常见用法总结
2018/07/10 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
python集合的新增元素方法整理
2020/12/07 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
html5 canvas 简单画板实现代码
2012/01/05 HTML / CSS
制衣厂各岗位职责
2013/12/02 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
意向书范文
2014/03/31 职场文书
爱岗敬业演讲稿
2014/05/05 职场文书
体育口号大全
2014/06/18 职场文书
2016高考感言
2015/08/01 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers