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 相关文章推荐
Dom加载让图片加载完再执行的脚本代码
May 15 Javascript
JAVASCRIPT keycode总结
Feb 04 Javascript
javascript web对话框与弹出窗口
Feb 22 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 Javascript
js实现非常简单的焦点图切换特效实例
May 07 Javascript
js获取微信版本号的方法
May 12 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
简单总结JavaScript中的String字符串类型
May 26 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
js String.prototype.trim字符去前后空格的扩展
Aug 23 Javascript
vue实现移动端拖动排序
Aug 21 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中echo和print的区别
2014/08/28 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
php实现xml与json之间的相互转换功能实例
2016/07/07 PHP
Yii框架安装简明教程
2020/05/15 PHP
js获得鼠标的坐标值的方法
2013/03/13 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
详解vue父子组件间传值(props)
2017/06/29 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
Python ljust rjust center输出
2008/09/06 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
python在不同条件下的输入与输出
2020/02/13 Python
Python远程方法调用实现过程解析
2020/07/28 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
美国和加拿大房车出售在线分类广告:RVT.com
2018/04/23 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
网络安全方面的面试题
2016/01/07 面试题
金融行业务员的自我评价
2013/12/13 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
中药专业自荐信范文
2014/03/18 职场文书
开业典礼主持词
2014/03/21 职场文书
励志演讲稿500字
2014/08/21 职场文书
个人合伙协议书范本
2014/10/14 职场文书
退货证明模板
2015/06/23 职场文书
农村婚礼司仪主持词
2015/06/29 职场文书
html2 canvas svg不能识别的解决方案
2021/06/03 HTML / CSS