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

20 VUE学习:插件

介绍

在这里插入图片描述

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。下面是如何安装一个插件的示例:

import { createApp } from 'vue'const app = createApp({})app.use(myPlugin, {/* 可选的选项 */
})

一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的[应用实例]和传递给 app.use() 的额外选项作为参数:

const myPlugin = {install(app, options) {// 配置此应用}
}

插件没有严格定义的使用范围,但是插件发挥作用的常见场景主要包括以下几种:

  1. 通过 [app.component()]和 [app.directive()]注册一到多个全局组件或自定义指令。
  2. 通过 [app.provide()]使一个资源[可被注入]进整个应用。
  3. 向 [app.config.globalProperties]中添加一些全局实例属性或方法
  4. 一个可能上述三种都包含了的功能库 (例如 [vue-router])。

编写一个插件

在这里插入图片描述

为了更好地理解如何构建 Vue.js 插件,我们可以试着写一个简单的 i18n ([国际化 (Internationalization)] 的缩写) 插件。

让我们从设置插件对象开始。建议在一个单独的文件中创建并导出它,以保证更好地管理逻辑,如下所示:

// plugins/i18n.js
export default {install: (app, options) => {// 在这里编写插件代码}
}

我们希望有一个翻译函数,这个函数接收一个以 . 作为分隔符的 key 字符串,用来在用户提供的翻译字典中查找对应语言的文本。期望的使用方式如下:

<h1>{{ $translate('greetings.hello') }}</h1>

这个函数应当能够在任意模板中被全局调用。这一点可以通过在插件中将它添加到 app.config.globalProperties 上来实现:

// plugins/i18n.js
export default {install: (app, options) => {// 注入一个全局可用的 $translate() 方法app.config.globalProperties.$translate = (key) => {// 获取 `options` 对象的深层属性// 使用 `key` 作为索引return key.split('.').reduce((o, i) => {if (o) return o[i]}, options)}}
}

我们的 $translate 函数会接收一个例如 greetings.hello 的字符串,在用户提供的翻译字典中查找,并返回翻译得到的值。

用于查找的翻译字典对象则应当在插件被安装时作为 app.use() 的额外参数被传入:

import i18nPlugin from './plugins/i18n'app.use(i18nPlugin, {greetings: {hello: 'Bonjour!'}
})

这样,我们一开始的表达式 $translate('greetings.hello') 就会在运行时被替换为 Bonjour! 了。

请谨慎使用全局属性,如果在整个应用中使用不同插件注入的太多全局属性,很容易让应用变得难以理解和维护。

插件中的 Provide / Inject

在插件中,我们可以通过 provide 来为插件用户供给一些内容。举例来说,我们可以将插件接收到的 options 参数提供给整个应用,让任何组件都能使用这个翻译字典对象。

// plugins/i18n.js
export default {install: (app, options) => {app.provide('i18n', options)}
}

现在,插件用户就可以在他们的组件中以 i18n 为 key 注入并访问插件的选项对象了。

<script setup>
import { inject } from 'vue'const i18n = inject('i18n')console.log(i18n.greetings.hello)
</script>

插件和组件傻傻分不清楚

Vue插件和组件是Vue.js框架中的两个重要概念,它们在功能和使用方式上有一些区别和联系。

区别:

  1. 定义和用途

    • 组件:组件是Vue应用中的基本构建块,用于构建用户界面。一个组件封装了HTML、CSS和JavaScript,可以在应用中重复使用。组件通常用于构建UI的某个部分,比如按钮、表单、列表等。
    • 插件:插件则是用来增强Vue本身的功能。插件可以是一个库,提供全局的功能,如添加全局方法或属性、添加实例方法、使用mixin、添加全局资源(如指令、过滤器、过渡等)、提供Vue实例的生命周期钩子等。
  2. 使用范围

    • 组件:组件通常是局部的,它们在特定的Vue实例或组件中注册和使用。
    • 插件:插件通常是全局的,一旦安装,它的功能就可以在整个应用中使用。
  3. 注册方式

    • 组件:组件可以通过Vue.component()全局注册,也可以在组件的components选项中局部注册。
    • 插件:插件需要使用Vue.use()方法来安装,这个方法会调用插件的install方法,并传入Vue构造函数。

联系:

  1. 复用性

    • 组件和插件都是为了提高代码的复用性。组件通过封装UI元素来复用界面,而插件通过封装功能来复用逻辑。
  2. 扩展性

    • 组件和插件都可以用来扩展Vue应用的功能。组件扩展UI,插件扩展Vue本身的功能。
  3. 依赖管理

    • 组件和插件都可以依赖其他模块或库,并通过合适的依赖管理方式(如npm)来引入这些依赖。
  4. 生命周期

    • 组件和插件都可以利用Vue的生命周期钩子来执行特定的逻辑,如在组件创建、更新或销毁时执行代码。

总结来说,组件主要用于构建用户界面,而插件用于增强Vue本身的功能。它们都是Vue生态系统中重要的组成部分,通过不同的方式来提高代码的复用性和可维护性。

关注我,不迷路,共学习,同进步

关注我,不迷路,共学习,同进步

在这里插入图片描述

http://www.lryc.cn/news/357767.html

相关文章:

  • python之any用法
  • 【前端学习——react坑】useState使用
  • 【前端每日基础】day28——async/await
  • 错误记录:从把项目从Tomcat8.5.37转到Tomcat10.1.7
  • AJAX基础知识
  • xcode依赖包package已经安装,但是提示No such module ‘Alamofire‘解决办法
  • 基于Centos7 安装k8s一主两从
  • 基于java实现图片中任意封闭区域识别
  • 闭包是什么?有什么特性?对页面有什么影响?
  • MS Excel: 高亮当前行列 - 保持原有格式不被改变
  • langchain学习(十三)
  • 【Nginx】深入解析Nginx配置文件
  • 深入了解Nginx(一):Nginx核心原理
  • 产品经理-流程图结构图(四)
  • 15、Spring系统-AOP
  • 服务器感染了. rmallox勒索病毒,如何确保数据文件完整恢复?
  • [每日一练]按日期分组销售产品的最优解法
  • 免费wordpress中文主题
  • 单链表经典算法题理解
  • STM32的时钟介绍
  • FindBI学习总结
  • k8s——Pod详解
  • Visual Studio 的调试
  • mysql语句大全及用法
  • 如何找出真正的交易信号?Anzo Capital昂首资本总结7个
  • JavaScript-内存分配
  • 理论知识.质数打表
  • FFMPEG+ANativeWinodow渲染播放视频
  • 使用AXI MIG/Proc Sys Reset
  • Android基础-Kotlin语言的作用及优缺点