当前位置: 首页 > news >正文

vue2自定义指令

本节目标

  • 快速入门
  • v-loading

快速入门

指令对比

基本语法

  1. 使用: v-指令名="指令值"
  2. 定义: 通过 directives 局部定义或者全局定义
  3. 通过事件对象 el 可以拿到指令所在元素
  4. 通过形参 binding 可以拿到指令的传值
  5. 通过update钩子, 可以监听指令值的变化,进行更新操作

局部注册

<template><div id="app"><input v-focus type="text" /></div>
</template><script>
export default {// 局部注册自定义指令directives: {focus: {// 指定的生命周期: 指令所在的元素, 挂载完毕后触发inserted(el) {// el就是指令绑定的元素el.focus();},},},
};
</script>

全局注册

... ...Vue.directive('focus', {// 指定所在的元素被加载后执行inserted: function (el) {// el就是所绑定的元素el.focus()}
})... ...

指令传值

<template><div id="app"><h2 v-color="color1">我是一个标题</h2><h2 v-color="color2">我是一个标题</h2></div>
</template><script>
export default {data() {return {color1: "red",color2: "blue",}},// 局部注册自定义指令directives: {   color: {inserted(el, binding) {el.style.color = binding.value;},// 指令的值(binding)修改时触发update(el,binding) {el.style.color = binding.value;}}},
};
</script>

v-loading

封装一个v-loading指令, 实现加载中的效果

分析

  1. 本质loading效果就是一个蒙层, 盖在盒子上
  2. 数据请求时, 开启loading状态, 添加蒙层
  3. 数据请求完毕, 关闭loading状态, 移除蒙层

实现

  1. 准备一个loading类, 通过伪元素定位, 设置宽高, 实现蒙层
  2. 开启关闭loading状态, 本质只需要添加和移除类名即可
  3. 结合自定义指令的语法进行封装复用
<template><!-- 2,使用loading指令 --><div class="box" v-loading="isLoading"><ul><li v-for="item in list" :key="item">我是内容{{ item }}</li></ul></div>
</template><script>
export default {data () {return {list: [],isLoading: true,}},async created () {setTimeout(() => {this.list = [1,2,3,4,5]// 3,关闭loading效果this.isLoading = false}, 2000)},directives: {// 1, 注册loading指令loading: {inserted(el, binding) {binding.value ? el.classList.add('loading') : el.classList.remove('loading')},update(el, binding) {binding.value? el.classList.add('loading') : el.classList.remove('loading')}}}
}
</script><style>
/* 伪类 - 蒙层效果 */
.loading:before {content: '';position: absolute;left: 0;top: 0;width: 100%;height: 100%;background: #fff url('./loading.gif') no-repeat center;
}.box {width: 800px;min-height: 500px;border: 3px solid orange;position: relative;
}
</style>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI 边缘计算平台 - 回归开源 BeagleY-AI 简介
  • 机器学习-13-基于决策树算法构建北京市空气质量预测模型(实战)
  • 从零开始精通Onvif之获取设备信息
  • 绿联Nas docker 中 redis 老访问失败的排查
  • PhpStorm 项目部署/与git提交操作
  • java定时任务 设置开始时间、结束时间;每周一、四、六执行;并且隔n周执行。最后计算所有执行时间
  • GPT-4o:OpenAI的最新篇章与深度探索
  • 每日两题6
  • 设计高并发电商系统:每秒10000次请求的挑战与投资
  • WPF-UI布局
  • 深入探讨5种单例模式
  • 0605-JavaSE-单例模式-饿懒汉模式
  • 滑动窗口算法:巧妙玩转数据的窗外世界
  • 基于Python实现可视化分析中国500强排行榜数据的设计与实现
  • 【RabbitMQ】RabbitMQ配置与交换机学习
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [译] React v16.8: 含有Hooks的版本
  • ➹使用webpack配置多页面应用(MPA)
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Linux快速复制或删除大量小文件
  • Python中eval与exec的使用及区别
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • REST架构的思考
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Tornado学习笔记(1)
  • Vim 折腾记
  • vue:响应原理
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 从0到1:PostCSS 插件开发最佳实践
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 如何设计一个比特币钱包服务
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 一文看透浏览器架构
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ‌移动管家手机智能控制汽车系统
  • ###项目技术发展史
  • #QT(QCharts绘制曲线)
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $jQuery 重写Alert样式方法
  • (52)只出现一次的数字III
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (zt)最盛行的警世狂言(爆笑)
  • (办公)springboot配置aop处理请求.
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (力扣)循环队列的实现与详解(C语言)
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)软件性能测试
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)大道至简,职场上做人做事做管理