最小化实现
最小化实现 ,inserted, 和bind的区别可以取官网看,不同的使用场景
Vue.directive('collect', { inserted (el,bindbing) { } });
|
collect
表示自定义指令的名称 bindbing.name
close_vip
这部分表示自定义指令的参数 bindbing.arg
.click .stop
表示修饰符 binding.modifiers.click, binding.modifiers.stop
{title: "关闭弹窗"}
这部分表示 自定义指令的值. binding.value
Vue自定义指令设计
Vue自定义指令其实就是html 的属性,通过给 Vue自定义指令也是 html属性的一种语法糖,所以自定义其实就是通过 html 标签属性的形式,通过一系列规则的封装成的一些特定功能,下面看看如何实现
实现自定义指令需要弄明白一下几个问题。
- 自定义指令使用的使用的多种方法,name,修饰符等等
- 自定义指令插件化开发,如何解耦合?
自定义指令编写
import { dw } from '@/utils';
export class Collect { inserted(el, binding) { let { value, arg, modifiers } = binding; let { click, show, prevent, stop } = modifiers; if (show) { dw.onEvent(arg, value); } if (click) { el.addEventListener('click', event => { stop && event.stopPropagation(); prevent && event.preventDefault(); dw.onEvent(arg, value); }, false); } } bind() { } unbind(el, bingding) { const { click = false } = bingding.modifiers; const { value } = bingding; if (click) { el.removeEventListener('click',() => { COLLECT(value); },false); } } static install(Vue) { console.log('执行安装'); Vue.directive('vascollect', new Collect()); } }
|
使用Vue.use安装
使用Vue.use的形式使用,使其Vue项目更加规范化
main.js
import Vue from 'vue' import Collect from '@/directives/collect'; Vue.use(Collect)
|
使用
通过collect点击时上报 数据埋点事件
<button v-collect:close_vip.click.stop="{ title: "关闭弹窗"} ">Submit</button>
|