Vue自定义指令-让你的业务开发更简单

这篇具有很好参考价值的文章主要介绍了Vue自定义指令-让你的业务开发更简单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、使用场景

在日常开发中,我们会将重复代码抽象为一个函数或者组件,然后在需要时调用或者引入。但是,对于某些功能,这种方法可能不够优雅或者不够灵活。例如,我们可能需要在DOM元素上添加一些自定义属性或者绑定一些事件,这些操作可能难以通过函数或组件来实现。这时,自定义指令就派上用场了。

2、简介

1.注册使用(官网例子:页面加载时,该元素将获得焦点)

  • 全局注册
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
});
  • 组件注册
...
directives: {
  focus: {
    // 指令的定义
    inserted: function (el) {
      el.focus()
    }
  }
}
...
  • 使用
<input v-focus>

2.钩子函数

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  • bind: 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。
  • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
  • unbind:只调用一次,指令与元素解绑时调用。

3.钩子函数参数

  • el:指令所绑定的元素,可以用来直接操作 DOM。
  • binding:一个对象,包含以下 property:
  • vnode:Vue 编译生成的虚拟节点
  • oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。

Vue自定义指令-让你的业务开发更简单

4.举个例子

<div>
    <button @click="changeCustom">显示:{{ isShowCustom }}</button>
    <button @click="changeCustomText">生成随机数</button>
</div>
<div class="custom-box" v-if="isShowCustom">
    <div v-change-style="'#0f0'">{{ customMsg1 }}</div>
</div>
...
// 注册全局自定义指令
Vue.directive('change-style', {
    bind: (el) => {
        console.log('1、只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。');
    },
    inserted: () => {
        console.log('2、被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。');
    },
    update: () => {
        console.log('3、所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。');
    },
    componentUpdated: () => {
        console.log('4、指令所在组件的 VNode 及其子 VNode 全部更新后调用。');
    },
    unbind: () => {
        console.log('5、只调用一次,指令与元素解绑时调用。');
    },
});

Vue自定义指令-让你的业务开发更简单

3、优点

1.重用性:多个组件之间共享代码 2.封装性: 将特定的操作封装在指令中,使得组件代码更加简洁,易于维护 3.灵活性:可以处理一些特定的操作,例如修改DOM属性、绑定事件等 4.可读性
让模板更加清晰和易于阅读。在模板中使用指令可以让代码更加简洁明了,从而降低了代码的复杂度 5.可维护性:把特定的逻辑封装在指令内部,从而让代码更加易于维护。如果需要更改某个行为,只需要在指令中修改即可,不需要修改多个组件 6.**
可扩展性**:如果需要添加新的特殊行为,只需要创建一个新的指令即可

4、常用自定义指令

以下总结了个人在日常活动开发中常用的自定义指令

1.防止重复操作(节流)
一段时间内只允许操作一次 适用场景:接口请求、频率限制

// 用法:v-throttle = [节流时间] 
// 单位:毫秒
<button v-throttle="2000" @click="print">提交</button>

Vue自定义指令-让你的业务开发更简单

2.一键复制

// 用法:v-copy = [待复制内容文本] 
// 类型:string
<button v-copy="'这是一段复制内容'">复制按钮</button>

Vue自定义指令-让你的业务开发更简单

3.活动埋点 页面曝光埋点以及点击事件埋点

// 用法 v-track:[埋点上报页面].[埋点类型].[是否延时] = "埋点"
// 埋点上报页面 - page_id 默认值::activity_page
// 埋点类型 - event| exposure 默认值: click
// 是否延时 - delay 默认值:2000ms

// 点击事件指令
<button v-track:activity_page.click.delay="'btn_click'">点击事件</button>
// 等价于以下方法:
setTimeout(() => {
    track({
        page_id: 'activity_page',
    }, 'click');
}, 2000);

// 曝光事件指令
<div v-track:activity_page.exposure></div>
// 等价于以下方法:
track({
    page_id: 'activity_page',
}, 'exposure');

Vue自定义指令-让你的业务开发更简单

4.图片懒加载 在图片出现在视窗区域时开始加载,减少不必要的请求以及流量,适用于无限滚动列表以及瀑布流页面。

用法:v-lazy = [图片地址]
<img v-lazy="item">

Vue自定义指令-让你的业务开发更简单

5.悬浮拖拽 悬浮可拖拽按钮

// 用法: v-drag
// 备注:目前暂支持移动端
<button v-drag @click="print">拖拽按钮</button>

6.无限滚动加载 让网页在滚动到页面底部时自动加载更多的内容,从而提高用户体验和页面性能。

// 用法:v-scroll-bottom = "事件"
v-scroll-bottom="loadMore"
<div class="list-box h-[300px] !px-[10px] overflow-scroll" v-scroll-bottom="loadMore">
    <div class="h-[50px] leading-[50px] bg-[#CCC] mb-[12px] text-center" v-for="(item, index) in list"
         :key="index">
        {{ index }}
    </div>
</div>

Vue自定义指令-让你的业务开发更简单

7.其他自定义指令

  • 非活动时间操作提示
  • 金额处理
  • 表单输入框处理判断处理
  • 权限管理

5、总结

可以看到,通过封装使用自定义指令,使我们的代码更简洁优雅,在实际开发中,可以根据具体场景和需求来使用自定义指令,以提高开发效率和代码质量。

directives.js代码文件


注:代码基于vue2.x版本

参考:
自定义指令 — Vue.js
撸一个 Vue 自定义指令实现一键 Copy的功能 - 掘金
v-track文章来源地址https://www.toymoban.com/news/detail-472414.html

到了这里,关于Vue自定义指令-让你的业务开发更简单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自定义鼠标指针——让你的指针瞬间变美

    首先,在开始今天的内容之前,我们先来看一下上次投票结果: 很明显,我们的“2号选手”顺利夺得了第一。 好,二话不说,开启今天的内容。 先来看一下我的鼠标指针:(额,我是个MC党(注:上一篇博客发迷你世界抢滩登陆只是素材需要,不要喷))  玩过MC的应该都

    2024年02月08日
    浏览(34)
  • 小程序自定义tabbar—让你的小程序与众不同

    本篇文章将详细介绍微信小程序自定义tabbar的设置方法和注意事项,希望能够帮助广大开发者更好地开发和设计自己的微信小程序,实现更加个性化和独特的用户体验。 目录 前言 一、自定义tabbar设置的重要性 二、怎么设置自定义tabbar呢 第一步,配置信息 第二步,添加tab

    2024年02月16日
    浏览(47)
  • 点击器自动点击器,让你的屏幕操作变得更加简单

    点击器自动点击器,也被称为屏幕点击器或鼠标连点器,是一种能够模拟人类点击行为的工具。它可以在特定时间间隔内自动执行鼠标点击操作,来代替用户手动点击屏幕。这种工具通常运行在Windows、MacOS和Linux等操作系统上,并可以与其他软件集成使用。   以下是本文的主

    2024年02月09日
    浏览(52)
  • 逍遥自在学C语言 | 宏定义技巧让你的C代码快人一步

    在C语言中,宏定义是一种预处理指令,用于在代码中定义和使用常量、函数或代码片段的替代。 宏定义使用 #define 来定义,并在代码中进行替换。宏定义具有以下优点: 简化代码 :宏定义可以将一些常用的、重复出现的代码片段简化为一个宏名称,提高代码的可读性

    2024年02月08日
    浏览(57)
  • 【Vue】怎样让你的组件变得更灵活?

    在我们的日常开发中,我们一般会引入做的比较成熟的第三方UI框架,比如ElementUI。 当我们在调用UI框架中的组件时,会发现常用的调用方式有两种,一种是直接在页面中嵌入组件: 另一种则是在js中通过方法调用: 可以看到ElementUI中的组件使用方式更加灵活,可以满足不同

    2024年02月06日
    浏览(80)
  • chatgpt赋能python:Python自动抢票:让你的购票经历更加简单便捷!

    随着互联网的发展,越来越多的人选择在网上购买火车、飞机等交通工具的票。但是,一些火爆的车次、航班往往在开售后仅仅几秒钟内就被抢完,让很多想出行的人非常苦恼。在这种情况下,Python自动抢票就成了很多人的“救星”。 Python自动抢票是指利用Python编程软件,通

    2024年02月15日
    浏览(44)
  • 前端开发攻略---Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

    这个指令不是原生自带的,需要手动去书写,但是这辈子只需要编写这一次就好了,后边可以反复利用。 IntersectionObserver 是一个用于监测元素是否进入或离开视口(viewport)的 API。它可以帮助你在页面滚动时或者元素位置改变时进行回调操作,这样你就可以根据元素是否可见

    2024年04月11日
    浏览(49)
  • Vue实现二维码,让你的数据轻松传递

    在我们生活中,二维码的应用越来越广泛,特别是在移动互联网的时代,二维码成为了快速传达信息的一种利器。在这篇文章中,我们将会介绍如何在Vue框架下,实现一个具备扫描和查看数据的二维码。 在这一篇文章中,我们将会使用到以下两个库: qrcode.js :一个简单易用

    2024年02月05日
    浏览(53)
  • vue设置全局变量:让你的数据无处不在!

    在 vue 开发中,如何设置全局变量是一个关键问题。本文将介绍多种方法,帮助大家轻松实现全局变量的共享,提升 vue 项目的开发效率。让我们一起来探索这些方法,为你的 vue 项目带来更好的开发体验。 通过在 vue 的原型上定义属性,可以在所有组件中访问该属性。例如,

    2024年02月08日
    浏览(42)
  • 简单操作让你的网站不受恶意流量恶意爬虫威胁!Cloudflare防火墙部署指南

    目前国际有不少网站都挂了Cloudflare服务,Cloudflare主要提供的安全服务是帮助网站阻止来自网络的黑客攻击、垃圾邮件等,并提升网页的浏览速度等。笔者近日在Cloudflare为自己的网站部署好了防火墙(WAF)、抗DDoS等防护,颇有成效,因此给大家介绍一下,帮助大家更轻松地部

    2024年02月22日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包