18.Composition API(四)高级语法补充

news/2024/5/19 5:27:34/文章来源:https://blog.csdn.net/phoebemeng/article/details/126938260

1.自定义指令

之前我们学习了各种指令:v-model、v-for、v-show等,除了这些指令外,Vue允许我们自定义指令。

什么时候使用自定义指令?
需要对DOM元素进行底层操作,这个时候就会用到自定义指令

注意:在Vue中,代码的复用和抽象主要还是通过组件。

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

案例:某个元素挂载完成后自动获取焦点。
(1)默认实现,不使用自定义指令.

<template><div><input type="text" ref="input"></div>
</template><script>import {ref,onMounted} from "vue";export default {setup() {const input = ref(null)onMounted(() => {input.value.focus();})return {input}}}
</script>

(2)定义局部指令

<input type="text" v-focus>
export default {// 局部指令directives:{focus:{mounted(el){el.focus()}}}}

(3)定义全局指令
在main.js中定义

const app = createApp(App)
// 定义全局指令
app.directive("focus", {mounted(el) {el.focus()}
})app.mount('#app')

2.指令的生命周期

在这里插入图片描述

<template><div><button v-if="counter<2" @click="increment" v-phoebe>当前计数{{counter}}</button></div>
</template><script>import { ref } from "vue"export default {setup(){const counter =ref(0)const increment = ()=>counter.value++return {counter,increment}},directives:{phoebe:{created(){console.log("phoebe created")},beforeMount(){console.log("phoebe beforeMount")},mounted(){console.log("phoebe mounted")},beforeUpdate(){console.log("phoebe beforeUpdate")},updated(){console.log("phoebe updated")},beforeUnmount(){console.log("phoebe beforeUnmounted")},unmounted(){console.log("phoebe unmounted")},}}}
</script>
<style>
</style>

在这里插入图片描述
时间戳格式化案例
App.vue

<template><div><!-- 可以传进参数,设置时间的格式 --><h2 v-format-time="'YYYY/MM/DD'">{{timestamp}}</h2></div>
</template><script>export default {setup(){const timestamp = 1669456723return {timestamp}}}
</script>

在这里插入图片描述
将自定义指令提取出来
format-time.js文件:

// 引入第三方库dayjs
import dayjs from "dayjs"
export default function(app){app.directive("format-time",{mounted(el,bindings){// 获取app.vue传入参数时间的格式let formatString = bindings.value// 如果没有传入使用默认格式if(!formatString){formatString = "YYYY-MM-DD HH-mm-ss"}const textContent =el.textContent// console.log(typeof textContent)   //字符串类型// 转换数据类型let timestamp = parseInt(textContent)//如果时间戳是10为,代表为秒钟;统一单位if(textContent.length === 10){timestamp = timestamp * 1000}el.textContent = dayjs(timestamp).format(formatString);// 使用第三方库 dayjs ;npm install dayjs}})
}

index.js

import registerFormatTime from "./format-time.js"
export default function registerDirectives(app) {registerFormatTime(app);
}

在main.js中使用即可,(定义的全局指令)

import registerDirectives from './directives'const app = createApp(App)
registerDirectives(app);

在这里插入图片描述

3.认识Teleport

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

某些情况下不希望挂载到这个组件树上,可以移动到Vue app之外的其他位置.通过teleport来完成.

Teleport是Vue提供的内置组件,翻译后有远程传输的意思.

有两个属性:
to: 指定将其中的内容移动到的目标元素,可以使用选择器;
disabled :是否禁用teleport的功能.

在index.html中添加一个div:
在这里插入图片描述

<template><div><teleport to="#phoebe"><h2>Hello teleport</h2></teleport></div>
</template>

在这里插入图片描述
还可以移动组件

<template><div><teleport to="#phoebe"><h2>Hello teleport</h2><hello-world></hello-world></teleport></div>
</template><script>import HelloWorld from "./HelloWorld.vue"export default{components:{HelloWorld}}
</script>

4.认识Vue插件

向Vue全局添加一些功能时,会采用Vue的插件模式.

两种编写方式:
对象类型: 一个对象,但是必须要包含一个install的函数,该函数会在安装插件时执行;
函数类型: 一个function,这个函数会在安装插件时自动执行.

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

  • 添加全局方法或者property(属性),通过把他们添加到config.globalproperties上实现.
  • 添加全局资源 :指令/过滤器/过渡等;
  • 通过全局 mixin来添加一些组件选项;
  • 一个库,提供自己的API,同时提供上面提到的一个或多个功能.
//创建一个vue插件  对象方式object
export default{install(app){console.log(app)}
}

或者是用函数的方式创建:

//一个函数的方式
export default function(app){console.log(app)
}

在main.js中使用插件:

//引入插件
import  plugin from "./plugins/plugins01.js"
const app = createApp(App)
//使用插件
app.use(plugin)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11320.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二章 ES数据操作与集群

一、回顾 1.介绍ES 2.ES原理 3.ES功能 4.ES使用场景 5.ES安装 1)ES配置文件(单点配置) [root@es01 ~]# grep ^[a-z] /etc/elasticsearch/elasticsearch.yml node.name: es-1 path.data: /data/es/data path.logs: /data/es/log bootstrap.memory_lock: true network.host: 1…

Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

因为另一台机器开发时,android studio提示更新什么东西,无脑点了。 导致原先的那台开发机器,无法build,报异常: Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8 有两个方法解决: 1、修改jdk从1.8改到11如果没有这个选项,可能需要安装…

高项重点内容

BI&#xff0c;商业智能 联机事务处理OLTP主要是执行基本日常的事务处理&#xff0c;比如数据库记录的增删查改。比如在银行的一笔交易记录&#xff0c;就是一个典型的事务。联机分析处理是数据仓库系统的主要应用&#xff0c;支持复杂的分析操作&#xff0c;侧重决策支持&…

Java高级:IO

笔记来源&#xff1a;尚硅谷Java入门视频教程(在线答疑Java面试真题) 文章目录一 File类的使用1.1 基本概述1.2 File类的常用构造器1.3 路径分隔符1.4 File类常用方法二 IO流原理及流的分类2.1 IO原理2.2 流的分类2.3 节点流和处理流2.4 InputStream & Reader2.4.1 InputSt…

mini LED显示屏—点胶测量

mini LED显示屏作为一种LED的一种技术&#xff0c;其产品已开始应用于超大屏高清显示&#xff0c;如监控指挥、高清演播、高端影院、医疗诊断、广告显示、会议会展、办公显示、虚拟现实等商用领域。 而本次测量mini LED显示屏胶水高度。测试采样步距间隔大小的测量精度&#xf…

基于PHP的校园二手信息网站的设计与实现毕业设计源码251656

目 录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3论文结构与章节安排 2 校园二手信息网站系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2…

压裂反排液除氨氮树脂技术

项目名称 中国石油工程建设除氨氮项目 工艺选择 沉淀工艺软化系统膜系统离子交换脱氨系统&#xff0c;出水稳定在0.2mg/l 工艺原理 页岩气开采反排液&#xff0c;经过沉淀工艺后进入软化系统&#xff0c;然后经过反渗透工艺后进行离子交换脱氨工艺。 下面这个案例分享是科…

戴尔笔记本重装系统硬盘加密怎么解除

​bitlocker加密可以很好地保护计算机中的数据&#xff0c;那么dell电脑硬盘的bitlocker加密如何解除 ?小编给大家介绍一下解除戴尔笔记本硬盘加密的方法。 工具/原料&#xff1a; 系统版本&#xff1a;windows10系统 品牌型号&#xff1a;戴尔 方法/步骤&#xff1a; 解…

Methyltetrazine-Maleimide,甲基四嗪-马来酰亚胺 一种可降解ADC linker

●中文名&#xff1a;甲基四嗪-马来酰亚胺 ●英文&#xff1a;Methyltetrazine-Maleimide ●外观以及性质&#xff1a;红色固体&#xff0c;Methyltetrazine-Maleimide 是一种可降解 (cleavable) 的 ADC linker&#xff0c;可用于合成抗体偶联药物 (ADC)。其次是一种点击化学马…

【云原生 | 从零开始学Kubernetes】二十二、kubernetes持久化存储下

该篇文章已经被专栏《从零开始学k8s》收录 上一篇文章&#xff1a;kubernetes持久化存储上 点击跳转 持久化存储下k8s 持久化存储&#xff1a;hostPathk8s 持久化存储&#xff1a;nfsk8s 持久化存储&#xff1a; PVCk8s PV 是什么&#xff1f;k8s PVC 是什么&#xff1f;k8s PV…

【Docker】简单搭建Portainer

既然是家用的Docker那就不上Rancher了&#xff0c;直接通过Portainer轻量化解决所有问题。还好最新的Portainer还是很人性化的&#xff0c;搭建也比较简单&#xff0c;说白了原理就是直接通过宿主机的Docker进行同调&#xff08;这个可以通过下面的启动语句得知&#xff09;。 …

MySQL数据库之进阶查询语句

目录 一、常用查询 1、按关键字查询 ①升序排序 ②降序排序 ③结合where进行条件过滤 ④多字段排序 2、and和or判断 ①and和or的使用 ②嵌套、多条件使用 3、distinct 查询不重复记录 4、group by 对结果进行分组 5、limit限制结果条目 6、设置别名&#xff…

Sentinel核心算法设计与实现

这里我们先一起了解一下Sentinel的一些比较重要的概念 ,Sentinel 整体工作流程采用责任链模式,功能定义Slot,计数通过Node,在Slot中通过选用不同的Node实现不同的流控模式。 Node 用于不同纬度的计数Slot 实现不同的功能Resource 受保护的资源Rule 保护资源规则 回顾完了S…

跟踪元素可视?试试Intersection Observer

本文将讲解Intersection Observer的用法及其polyfill的原理&#xff0c;我们一起来看下。背景现在有以下几种场景。页面滚动时懒加载图片实现无线滚动页面&#xff08;Infinite scrolling&#xff09;根据某个元素是否出现在视窗从而执行某些逻辑&#xfeff;对于这些传统的实现…

ONES 参与《软件研发效能权威指南》编写

9月16-17日&#xff0c;2022 年 QECon 全球软件质量&效能大会在上海举行&#xff0c;ONES 联合创始人兼 CTO 冯斌受邀参加本次大会&#xff0c;并做了主题为《大型软件团队项目管理数字化实践》的分享。演讲剖析了百人以上大型团队的研发管理痛点&#xff0c;并结合 ONES 丰…

Sqlserver 根据父节点ID查询所有子节点

举例: 根据父节点ID查询出所有子节点 不含父节点DECLARE @ParentID int SET @ParentID=3; with CTEGetChild as ( select * from [dbAssetCheck-yili].[dbo].[vFinaceDepartment] where PFDepartmentId=@ParentID UNION ALL (SELECT a.* from [dbAssetCheck-yili].[dbo].[vFi…

【JavaWeb篇】快速学习MyBatis|实战项目详解

作者主页&#xff1a;橙子! 主页 系列专栏&#xff1a;JavaWeb基础教程系列 精彩回顾&#xff1a;HTTP协议详解 文章目的&#xff1a;快速学习MyBatis及实战项目详解 文章目录1.什么是MyBatis?2. JDBC存在的缺点3.Mybatis简化JDBC开发4.MyBatis快速入门1.什么是MyBatis? 简单…

工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

Balk——你不来,我走了

模式概要 通过synchronized关键字保护&#xff0c;判断一个契机&#xff0c;如果契机满足则继续执行&#xff0c;不满足则直接返回。 与Guarded Suspension模式有显著的对比。Guarded Suspensionhttps://blog.csdn.net/Day_and_Night_2017/article/details/126945643 核心思路…

kafka的学习笔记

kafka - producer&#xff1a;发布消息的对象称之为主题生产者&#xff08;Kafka topic producer&#xff09; - topic&#xff1a;Kafka将消息分门别类&#xff0c;每一类的消息称之为一个主题&#xff08;Topic&#xff09; - consumer&#xff1a;订阅消息并处理发布的消息的…