# 插件

插件是自包含的代码,通常向 Vue 添加全局级功能。它可以是公开 install() 方法的 object,也可以是 function

插件的功能范围没有严格的限制——一般有下面几种:

添加全局方法或者 property。如:vue-custom-element

添加全局资源:指令/过滤器/过渡等。如:vue-touch)

通过全局 mixin 来添加一些组件选项。(如vue-router)

添加全局实例方法,通过把它们添加到 config.globalProperties 上实现。

一个库,提供自己的 API,同时提供上面提到的一个或多个功能。如 vue-router

# 编写插件

为了更好地理解如何创建自己的 Vue.js 版插件,我们将创建一个非常简化的插件版本,它显示 i18n 准备好的字符串。

每当这个插件被添加到应用程序中时,如果它是一个对象,就会调用 install 方法。如果它是一个 function,则函数本身将被调用。在这两种情况下——它都会收到两个参数:由 Vue 的 createApp 生成的 app 对象和用户传入的选项。

让我们从设置插件对象开始。建议在单独的文件中创建它并将其导出,如下所示,以保持包含的逻辑和分离的逻辑。

// plugins/i18n.js

export default {

install: (app, options) => {

// Plugin code goes here

}

}

我们想要一个函数来翻译整个应用程序可用的键,因此我们将使用 app.config.globalProperties 暴露它。

该函数将接收一个 key 字符串,我们将使用它在用户提供的选项中查找转换后的字符串。

// plugins/i18n.js

export default {

install: (app, options) => {

app.config.globalProperties.$translate = key => {

return key.split('.').reduce((o, i) => {

if (o) return o[i]

}, options)

}

}

}

我们假设用户使用插件时,将在 options 参数中传递一个包含翻译后的键的对象。我们的 $translate 函数将使用诸如 greetings.hello 之类的字符串,查看用户提供的配置内部并返回转换后的值-在这种情况下为 Bonjour!。

例如:

greetings: {

hello: 'Bonjour!'

}

插件还允许我们使用 inject 为插件的用户提供功能或 attribute。例如,我们可以允许应用程序访问 options 参数以能够使用翻译对象。

// plugins/i18n.js

export default {

install: (app, options) => {

app.config.globalProperties.$translate = key => {

return key.split('.').reduce((o, i) => {

if (o) return o[i]

}, options)

}

app.provide('i18n', options)

}

}

插件用户现在可以将 inject[in18] 到他们的组件并访问该对象。

另外,由于我们可以访问 app 对象,因此插件可以使用所有其他功能,例如使用 mixin 和 directive。要了解有关 createApp 和应用程序实例的更多信息,请查看 Application API 文档。

// plugins/i18n.js

export default {

install: (app, options) => {

app.config.globalProperties.$translate = (key) => {

return key.split('.')

.reduce((o, i) => { if (o) return o[i] }, options)

}

app.provide('i18n', options)

app.directive('my-directive', {

mounted (el, binding, vnode, oldVnode) {

// some logic ...

}

...

})

app.mixin({

created() {

// some logic ...

}

...

})

}

}

# 使用插件

在使用 createApp() 初始化 Vue 应用程序后,你可以通过调用 use() 方法将插件添加到你的应用程序中。

我们将使用在编写插件部分中创建的 i18nPlugin 进行演示。

use() 方法有两个参数。第一个是要安装的插件,在这种情况下为 i18nPlugin。

它还会自动阻止你多次使用同一插件,因此在同一插件上多次调用只会安装一次该插件。

第二个参数是可选的,并且取决于每个特定的插件。在演示 i18nPlugin 的情况下,它是带有转换后的字符串的对象。

INFO

如果你使用的是第三方插件 (例如 Vuex 或 Vue Router),请始终查看文档以了解特定插件期望作为第二个参数接收的内容。

import { createApp } from 'vue'

import Root from './App.vue'

import i18nPlugin from './plugins/i18n'

const app = createApp(Root)

const i18nStrings = {

greetings: {

hi: 'Hallo!'

}

}

app.use(i18nPlugin, i18nStrings)

app.mount('#app')

awesome-vue 集合了大量由社区贡献的插件和库。

html5控件组合,[Vue 3] 教程 – 可复用与组合 – 插件相关推荐

  1. ActiveReports 报表控件官方中文入门教程 (2)-创建、数据源、浏览以及发布

    ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 原文:ActiveReports 报表控件官方中文入门教程 (2)-创建.数据源.浏览以及发布 本篇文章将阐述 ...

  2. ActiveReports 报表控件官方中文新手教程 (1)-安装、激活以及产品资源

     本系列文章主要是面向初次接触 ActiveReports 产品的用户,能够帮助您在三天之内轻松的掌握ActiveReports控件的基本用法,包含安装.激活.创建报表.绑定数据源以及公布等内容. ...

  3. 电子表格控件Spread.NET中文教程汇总

    Spread.NET 是当下最流行的兼容Microsoft Excel的.NET电子表格组件,适用于NET Windows Forms和ASP.NET开发.Spread表格控件在表格数据展现.表格操作 ...

  4. C# Winform控件包 MaterialSkin使用教程 免费开源,支持中文!

    如果没有拿到控件包DLL的可以去这篇文章里自取.C# Winform控件包分享,免费开源,支持中文! 控件比较多,我会抽出时间分控件逐一书写教程,不定时更新,感兴趣的朋友可以关注我. 本文将在以下几个 ...

  5. vue单位文本控件与vue加密文本控件

    vue单位文本控件: 使用方式: npm install dami-text-input --save使用:<text-input v-model="test" :unit= ...

  6. 界面开发控件DotNetBar for WPF教程:MobileRibbon快速入门指南(下)

    DotNetBar for WPF是一个用于创建专业WPF应用并拥有超过38个原生WPF控件的工具箱,其中包含了新的日程安排控件.Wpf-Ribbon控件.具有Office样式的Ribbon控件和Wp ...

  7. cad画流程图的插件_流程图控件FlowChart.NET使用教程:安排组件的使用

    FlowChart.NET现在更名为MindFusion.Diagramming for WinForms,这个是一个通用的流程图控件.MindFusion.Diagramming除WinForms版 ...

  8. Excel控件 Spire.XLS系列教程(2):C# 设置现有 Excel 图表的数据标签样式

    Spire.XLS是一款专业的Excel控件,无需安装微软Excel,也能拥有Excel的全套功能,能够为工厂智能化提供完善的Excel需求. Excel中图表的数据标签不仅可以增强图表的可读性,还可 ...

  9. 股票金融K线图控件AnyStock详细介绍教程

    AnyStock是一款基于XML/JSON的Flash金融图表解决方案,转换你的实时数据为具有交互功能的顶级图表,使你的数据直观地展现在Web页面上,控件支持滚动.下拉.动缩放效果等,并且提供了一系列 ...

最新文章

  1. 大叔手记(10):别再让面试官问你单例
  2. Winform中对自定义xml配置文件进行Xml节点的添加与删除
  3. 【视频】vue插值表达式之字符串的反转
  4. (function ( ){...})( ) IIFE 的原理
  5. 第4章 变量、作用域和内存问题
  6. 怎么把4399小游戏的代码_25行代码带你爬取4399小游戏数据,看下童年的游戏是否还在...
  7. (14)Node.js 核心模块—http
  8. web漏洞扫描工具_如何使用Arachni扫描web漏洞
  9. Python查找列表中相加等于s的n个数字(combinations的使用)
  10. ios上传图片文件到服务器,iOS 图片以文件形式上传到服务器
  11. 软件项目经理新手上路(11) - 找不到自己,看不见别人
  12. 墙裂推荐 iOS 资源大全
  13. Android横竖屏切换的解决方法
  14. 阿里云DataV数据展示的一些sql写法
  15. dll文件删不掉怎么办
  16. linux shell 统计词频,shell之词频统计
  17. 数字化转型的必要性和意义
  18. 那个丧心病狂的红蓝眼睛逻辑问题推理:第N天有N个红眼睛自杀,还是什么都不会发生?
  19. List中remove()方法的陷阱,开发谨记!
  20. 老生常谈之防止刷新重复提交表单。

热门文章

  1. Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : ‘x‘ must be atomic
  2. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用HH包中的interaction2wt函数为任何阶的双因素方差分析可视化主效应和交互作用图、箱图显示主效应
  3. R语言sd函数计算数值标准差实战(Standard Deviation)
  4. R语言使用ggplot2包使用geom_density()函数绘制分组密度图(自定义调色板、brewer、灰度比例)实战(density plot)
  5. R语言R原生及可视化包ggplot2绘制并排的箱图实战(Side-by-Side Boxplots)
  6. R语言Kmeans聚类、抽取聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(ASW)为Kmeans选择最优的聚类K值、并与层次聚类的最优K值进行比较
  7. 为什么一般用自增列作为主键?
  8. R语言rpartb包树回归模型构建:基于乳腺癌(breast cancer)数据集
  9. python和R文件IO操作对比及dataframe创建方式对比:read_csv、to_csv、write.csv、 data.frame、pd.DataFrame
  10. 分类模型评估体系:混淆矩阵、PR曲线、F1、Weighted F1、Micro F1、Macro F1、ROCAUC、KS曲线、Lift曲线、GAIN曲线