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 相关文章推荐
锋利的jQuery jQuery中的DOM操作
Mar 21 Javascript
node.js 一个简单的页面输出实现代码
Mar 07 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
canvas 实现中国象棋
Feb 17 Javascript
jquery实现左右轮播图效果
Sep 28 jQuery
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
JavaScript递归函数定义与用法实例分析
Jan 24 Javascript
vue.js仿hover效果的实现方法示例
Jan 28 Javascript
JavaScript面试技巧之数组的一些不low操作
Mar 22 Javascript
基于vue写一个全局Message组件的实现
Aug 15 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
Jul 11 Javascript
vue 在methods中调用mounted的实现操作
Aug 07 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数据库操作类
2008/06/04 PHP
php 在线打包_支持子目录
2008/06/28 PHP
php绘制一条弧线的方法
2015/01/24 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
laravel 5.1下php artisan migrate的使用注意事项总结
2017/06/07 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
如何解决手机浏览器页面点击不跳转浏览器双击放大网页
2016/07/01 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
微信小程序实现图片压缩功能
2018/01/26 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
Python中super()函数简介及用法分享
2016/07/11 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
Django model select的多种用法详解
2019/07/16 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python selenium循环登陆网站的实现
2019/11/04 Python
python异常处理之try finally不报错的原因
2020/05/18 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
学习党章思想汇报
2014/01/07 职场文书
《孔繁森》教学反思
2014/04/17 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
新党章的学习心得体会
2014/11/07 职场文书
计划生育个人总结
2015/03/02 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
导游词之五台山
2019/10/11 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
Golang ort 中的sortInts 方法
2022/04/24 Golang