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之过滤元素操作小结
Nov 30 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
JS实现超简洁网页title标题跑动闪烁提示效果代码
Oct 23 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
Aug 23 Javascript
JS实现数组按升序及降序排列的方法
Apr 26 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
Jul 21 Javascript
使用typescript开发angular模块并发布npm包
Apr 19 Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 Javascript
详解ES6 Promise对象then方法链式调用
Oct 20 Javascript
微信小程序实现列表页的点赞和取消点赞功能
Nov 02 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
Feb 18 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
Sep 13 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学习教程之第2天
2008/06/15 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
javascript 读取xml,写入xml 实现代码
2009/07/10 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
浏览器缩放检测的js代码
2014/09/28 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
老生常谈JavaScript获取CSS样式的方法(兼容各浏览器)
2018/09/19 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
JS字符串和数组如何实现相互转化
2020/07/02 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[00:32]DOTA2上海特级锦标赛 Ehome战队宣传片
2016/03/03 DOTA
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
python 字典item与iteritems的区别详解
2020/04/25 Python
Python如何绘制日历图和热力图
2020/08/07 Python
python实现视频压缩功能
2020/12/18 Python
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
大学生表扬信范文
2014/01/09 职场文书
网页美工求职信
2014/02/15 职场文书
黄金搭档广告词
2014/03/21 职场文书
师范生自荐信模板
2014/05/28 职场文书
大学生创业计划书
2014/08/14 职场文书
建议书范文
2015/02/05 职场文书
财务稽核岗位职责
2015/04/13 职场文书
获奖感言怎么写
2015/07/31 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL