一、认识自定义指令

在Vue的模板语法中我们学习过各种各样的指令:v-show、v-for、v-model等等,除了使用这些指令之外,Vue也允许我们来自定义自己的指令。

  • 注意:在Vue中,代码的复用和抽象主要还是通过组件
  • 通常在某些情况下,你需要对DOM元素进行底层操作,这个时候就会用到自定义指令

自定义指令分为两种:

  • 自定义局部指令:组件中通过 directives 选项,只能在当前组件中使用;
  • 自定义全局指令:app的 directive 方法,可以在任意组件中被使用;

比如我们来做一个非常简单的案例:当某个元素挂载完成后可以自定获取焦点

  • 实现方式一:如果我们使用默认的实现方式;
  • 实现方式二:自定义一个 v-focus 的局部指令;
  • 实现方式三:自定义一个 v-focus 的全局指令;

二、实现方式一:聚焦的默认实现

三、实现方式二:局部自定义指令

实现方式二:自定义一个 v-focus 的局部指令

  • 这个自定义指令实现非常简单,我们只需要在组件选项中使用 directives 即可;
  • 它是一个对象,在对象中编写我们自定义指令的名称(注意:这里不需要加v-);
  • 自定义指令有一个生命周期,是在组件挂载后调用的 mounted,我们可以在其中完成操作;

四、方式三:自定义全局指令

自定义一个全局的v-focus指令可以让我们在任何地方直接使用

五、指令的生命周期

六、指令的参数和修饰符

如果我们指令需要接受一些参数或者修饰符应该如何操作呢?

  • info是参数的名称;
  • .aaa.bbb是修饰符的名称;
  • 后面是传入的具体的值;

在我们的生命周期中,我们可以通过 bindings 获取到对应的内容:

七、自定义指令练习

自定义指令案例:时间戳的显示需求:

  • 在开发中,大多数情况下从服务器获取到的都是时间戳;
  • 我们需要将时间戳转换成具体格式化的时间来展示;
  • 在Vue2中我们可以通过过滤器来完成;
  • 在Vue3中我们可以通过 计算属性(computed) 或者 自定义一个方法(methods) 来完成;
  • 其实我们还可以通过一个自定义的指令来完成;

我们来实现一个可以自动对时间格式化的指令v-format-time:

  • 这里我封装了一个函数,在首页中我们只需要调用这个函数并且传入app即可;


八、认识Teleport

在组件化开发中,我们封装一个组件A,在另外一个组件B中使用:那么组件A中template的元素,会被挂载到组件B中template的某个位置; 最终我们的应用程序会形成一颗DOM树结构;

但是某些情况下,我们希望组件不是挂载在这个组件树上的,可能是移动到Vue app之外的其他位置:

  • 比如移动到body元素上,或者我们有其他的div#app之外的元素上;
  • 这个时候我们就可以通过teleport来完成;

Teleport是什么呢?

  • 它是一个Vue提供的内置组件,类似于react的Portals;
  • teleport翻译过来是心灵传输、远距离运输的意思;
    它有两个属性:
    — to:指定将其中的内容移动到的目标元素,可以使用选择器;
    — disabled:是否禁用 teleport 的功能;


和组件结合使用:
我们可以在 teleport 中使用组件,并且也可以给他传入一些数据;

九、多个teleport

如果我们将多个teleport应用到同一个目标上(to的值相同),那么这些目标会进行合并:

十、认识Vue插件

通常我们向Vue全局添加一些功能时,会采用插件的模式,它有两种编写方式:

  • 对象类型:一个对象,但是必须包含一个 install 的函数,该函数会在安装插件时执行;

  • 函数类型:一个function,这个函数会在安装插件时自动执行;

插件可以完成的功能没有限制,比如下面的几种都是可以的:

  • 添加全局方法或者 property,通过把它们添加到 config.globalProperties 上实现;
  • 添加全局资源:指令/过滤器/过渡等;
  • 通过全局 mixin 来添加一些组件选项;
  • 一个库,提供自己的 API,同时提供上面提到的一个或多个功能;

十一、插件的编写方式

Vue3 高级语法(二)—— 自定义指令、Teleport、Vue插件相关推荐

  1. Vue3学习之旅--Vue3高级语法补充-自定义指令,vue插件,Teleport......

    文章目录 Vue3高级语法补充 自定义指令 认识自定义指令 实现方式一:默认实现 实现方式二:局部自定义指令 方式三:自定义全局指令 指令的生命周期 指令的参数和修饰符 自定义指令练习 时间格式化指令 ...

  2. Vue3 高级语法以及自定义组件

    文章目录 1 .render函数 1. 1 h函数 1 .1 .1 h()函数的基本使用 1 .1 .2 h()函数中组件与插槽的使用 1 .2 jsx语法糖 1 .2 .1 jsx的配置(旧版本) ...

  3. Vue高级语法(一) | 自定义指令详解

    文章目录 Vue中自定义指令

  4. vue从入门到进阶:自定义指令directive,插件的封装以及混合mixins(七)

    一.自定义指令directive 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的 ...

  5. Vue的自定义指令以及Vue自定义指令的应用场景

    前言 一.Vue的自定义指令分为? vue中除了核心功能内置的指令外,也允许注册自定义指令.有的情况下,对普通DOM元素进行底层操作,这时候就会用到自定义指令. 自定义指令分为全局自定义指令和局部的自 ...

  6. Vue2(五):收集表单数据、过滤器、自定义指令、Vue的生命周期

    Vue2学习笔记:第五章 一.收集表单数据 1.不同标签的value属性 2.v-model的三个修饰符 二.过滤器 1.什么是过滤器? 2.案例:过滤器格式化时间戳 三.自定义指令 1.内置指令 2 ...

  7. vue技术点(3)—vuex、插槽、自定义指令、vue动画、keep-alive使用、mixin

    目录 1,vuex 1.1,vuex介绍 1.2,vuex的各个模块 1.3,Vuex实例应用 2,组件插槽 2.1,具名插槽 2.2,插槽作用域 3,自定义指令 4,vue动画 4.1,vue过渡动 ...

  8. Vue3 高级语法(一)—— h函数、jsx

    一.认识h函数 Vue推荐在绝大数情况下使用模板来创建你的HTML,然后一些特殊的场景,你真的需要JavaScript的完全编程的能力,这个时候你可以使用渲染函数 ,它比模板更接近编译器: 前面我们讲 ...

  9. [Vue]自定义指令

    前言 系列文章目录: [Vue]目录 老师的课件笔记,不含视频 https://www.aliyundrive.com/s/B8sDe5u56BU 笔记在线版: https://note.youdao ...

最新文章

  1. 深度学习 | 三个概念:Epoch, Batch, Iteration
  2. ThinkPhp插入数据到数据库
  3. python itchat库安装_操作微信-itchat库的安装
  4. git pull时冲突的几种解决方式
  5. Linux背后的思想
  6. SpringAOP描述及实现_AspectJ详解_基于注解的AOP实现_SpringJdbcTemplate详解
  7. Asp.Net回车键触发Button的OnClick事件解决方案
  8. Gitlab+jenkins持续集成+自动化部署(三)
  9. 聊聊我的 ACL2020 论文
  10. iCollections for Mac(桌面整理工具)
  11. Unity3D笔记 切水果 一
  12. MySQL从字符串提取数字
  13. coffeescript html5,CoffeeScript入门
  14. AndroidStudio有时候调试会一直卡在:starting LLDB server
  15. 网传三星手机大半夜黑屏乱码,原因竟然是闰四月?
  16. 第四回:产品创新性思维方法论
  17. NeRF论文解析 - Neural Radiance Field
  18. 自媒体时代网红电子商务
  19. vue3-video-play视频组件的使用(一)——基本使用 HTML5中Video标签的属性、方法和事件汇总
  20. 追剧还能得红包 《欢乐颂2》五美邀你来“抢”搜狗搜索现金大礼

热门文章

  1. 【笔试记录】2021/3/13美团
  2. httpd2.2配置文件详解
  3. 通过__tablename__ = 'xxx' #定义表名
  4. 存储过程 while is null_4.2 串的存储实现(2)
  5. 数据结构探险——图篇
  6. wangeditor html编辑,Vue整合wangEditor富文本编辑器
  7. 【链接】Solr的Filed中indexed与stored属性
  8. c#利用定时器自动备份数据库(mysql)
  9. 打CALL APP 项目进展 总体计划
  10. 【转】JMeter学习(十三)分布式部署