【Vue】插件的定义和使用

news/2024/5/17 20:13:31 标签: vue.js, 插件的定义和使用

‍之前我们学习过 mixin 混入,‍‍通过混入能够对一些代码逻辑做一些封装,‍‍
实际上我们如果使用plugin插件的这种功能,可以对代码做更好的封装,‍‍
今天学习在 Vue 里面如何来编写一个插件。‍‍

我们常见的比如说轮播的效果其实都是通过插件来实现的,
写一下我们要学习的是plugin插件的概念,‍‍

写一个templates就可以了,然后写一个div,

然后现在应该是可以展示出一个hello world的内容,一个最简单的页面:

那么接下来怎么去定义一个 Vue 里面的插件?

其实 Vue 里面的插件要解决的问题是把一些‍‍通用性的功能封装起来,
我们在这里写一个插件,比如说我定一个‍‍ const叫myplugin这样的插件,

它其实就等于一个对象就好了。‍‍写插件其实就写一个对象,在这里一定要写一个 install 方法,

表示‍‍插件运行时候会走的这样的一个逻辑。

install方法,它里面会接收两个参数,一个是 app,‍‍也就是 Vue 里面你创建出的 Vue 的实例,

另外一个参数就是options,我们怎么能看一下‍‍这个 app 和 options 到底是什么?‍‍

我们可以做一个实验,我们定义了一个插件,其实ta什么也没干,‍‍只是写了一个标准的格式,一个对象里面有一个 install 方法:

接收一个 app 和options,‍‍你这个插件有了,我们怎么去用它也很简单,

在这里我们‍‍使用 app 实例的时候,我可以用 app点use‍‍来使用我们定义的插件,

这是 Vue 提供的自己的语法。‍‍

app点use指的是 Vue 的应用,要去使用 myPlugin 这个插件:

如果使用这个插件,那么 install 方法就会执行,所以我可以在这里console点log一下 app 和options:

然后保存。我们看一下效果:

(代码里的分号该有的大家自己加一下)

我们可以看到第一个参数是可以打印出来的,它就是 Vue 的一个实例,
这个实例里面有什么‍‍?

mixing生命周期函数,还有·config,包括 provide‍‍都有。‍‍

第二个options打印出的东西它是一个 undefined:

说明 options 没传内容。‍‍那么options它指的是什么?
当我使用插件的时候,实际上我可以在后面去传递一些内容,比如说 name,我使用这个插件向插件里传入一些我自定义的参数保存:

那么我可以在这里刷一下:

大家可以看到这个时候打印出的name dell这样的一个对象其实就是你传递进去的一个对象,这个对象其实就会传递到options这块来,‍‍它就是 options的一个意思,也就是说你使用这个插件的时候,‍‍你额外的参数会放到 options 里面去,而 app 是使用这个插件对应的 Vue 的实例,‍‍

那么插件一般我们会怎么写,我们可以在插件里实现一些什么样的功能呢?‍‍

其实既然我们得到了 app 的实例,我们就可以在插件里面对这个 app 做很多的扩展,‍‍比如说我可以在这里去通过provide提供一个全局的数据,‍‍ provide就和我们之前写一个组件在这里写 provide是一样的语法。‍‍我在这里可以写一个provide一个叫做 name 这样的一个变量:

它的名字叫做 Dell Lee。‍‍

我这个插件在 app实例上扩展了一个name,
它的值是Dell Lee,‍‍那么我想在比如说实例下面子组件里,my-title组件里使用这个name,我该怎么使用呢?‍‍

我们现在比如说在这里直接写这个name,‍‍你是使用不了的:

刷新大家可以看一下,ta说name找不到:

为什么呢?

因为你provide的一个内容如果在子组件里面跨层级使用它的话,你必须得用什么?
是不是用 inject 跟一个数组,

然后把你要用到的provide过来的内容声明一下,你才能去使用它:

保存一下,我们再来看‍‍刷新:

Dell Lee 就可以拿到了,

我们这个插件在 app 上面去扩展了一个‍‍变量名字,我们可以在子组件里面去直接通过inject去使用它。‍‍

当然我们也可以扩展一些,比如指令 app点directive,

然后我们扩展一个叫做之前的 focus 这样的指令,
指令里面它有一个mounted(),‍‍ta会接收一个 el,

我们就可以让el点focus:

我在这儿扩展了一个自定义的指令。

这里我就可以再去写点内容,‍‍我可以写一个 input 框,然后加一个v杠focus :

保存一下。‍‍效果:

你会发现 input 框也可以用这个指令。


http://www.niftyadmin.cn/n/1384.html

相关文章

从零开始 Spring Boot 25:MyBatis II

从零开始 Spring Boot 25:MyBatis II 图源:简书 (jianshu.com) 在从零开始 Spring Boot 23:MyBatis - 红茶的个人站点 (icexmoon.cn)中我介绍了MyBatis的一些基本功能和用法,下文介绍遗漏的部分。 本文的示例代码都基于从零开始 …

C++ 基础入门 之 注释 ( // 和 /**/ )/变量 /常量 ( #define 和 const )/关键字/标识符(变量名)命名规则

C 基础入门 之 注释 ( // 和 /**/ )/变量 /常量 ( #define 和 const )/关键字/标识符(变量名)命名规则 目录 C 基础入门 之 注释 ( // 和 /**/ )/变量 /常量 ( #define 和 const )/关键字/标识符(变量名)命名规则 一、简单介绍 二、注释 ( // 和 /**/ ) 三、变量 (数据类型…

二分算法笔记

目录 什么是二分 举例 代码模型 例题 题目描述 输入格式 输出格式 AC代码: 什么是二分 假设一维数组 data 已经按升序排列,二分查找算法根据当前需要查找的区间[left,right]定义一个中间位置 middle=(left+ri…

基于simulink的超级电容,电池及DC motor充放电系统仿真

目录 一、理论基础 二、核心程序 三、测试结果 作者ID :fpga和matlab CSDN主页:https://blog.csdn.net/ccsss22?typeblog 擅长技术: 1.无线基带,无线图传,编解码 2.机器视觉,图像处理,三维重建 3.人工智能,深度学习 4.智能控制,智能优…

关于蓝桥杯单片机组自学的经验分享

这篇文章主题如标题所示。先说一下经验分享,文章末再写一些碎碎念。 蓝桥杯单片机组 客观题 程序设计题 数模电 C语言 单片机。 先说第一个等式,是从考题结构看的,程序设计题只要好好练,基本都能实…

WebSocket实现简单聊天功能案例

简介 使用WebSocket实现的一个简单的聊天功能业务 使用了SpringBoot的ApplicationEvent事件监听用来与业务解耦一、Maven的引入 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webso…

【计算机网络考研面试】体系结构与参考模型参考模型

文章目录分层结构名词解析认识分层各层次报文组成小结&#x1f351;&#x1f338;&#x1f343;博主昵称&#xff1a;一拳必胜客 博主主页面链接&#xff1a;博主主页传送门 博主专栏页面连接&#xff1a;专栏传送门–计算机考研 &#x1f351;创作初心&#xff1a;本博客的初心…

CenOS7各种自启动配置

配置spring boot开机自启动&#xff1b;编辑/lib/systemd/system/b2b2c.service [Unit] DescriptionB2B2C Server Documentationhttps://xxxxx.com[Service] Userroot Grouproot Typesimple Restartno KillModeprocess ExecStart/home/bbc-shop/jar_auto.sh #ExecStop/home/bb…