一篇文章告诉你如何编写Vue插件

目录
  • 什么是插件
  • 编写插件
  • 使用插件
  • 总结

什么是插件

在Vue框架中,如果需要给Vue增加一些我们需要的功能,Vue给我留了一个插件的方式,我们可以编写自己的插件,然后在Vue中去注册插件,然后去使用他。

通过Vue插件我们可以实现一些Vue框架没有的功能,也可以使用别人写好的插件,来帮助我们更快速的实现一些功能。

插件的功能范围并没有严格的要求,根据官方的示例来说,一般有下面几种:

1.添加全局方法或者属性,如:vue-custom-element,我们可以用插件方式添加一些全局组件,然后可以在任何页面或者组件当中去使用它。这也是Element UI或者Ant Design组件库安装组件的方式。

2.添加全局资源:指令/过渡等。如:vue-touch,我们也可以用插件方式去添加一些全局的自定义指令,来实现我们的功能。

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

4.添加全局实例方法,通过把它们添加到 config.globalProperties 上实现。比如常见我们可能会把$http请求放在全局实例方法上,方便我们在任何页面或者组件中去使用,不再需要去显式的import引入它。

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

编写插件

编写Vue插件其实很简单,一个插件其实就是一个对象,或者是一个函数,如果是对象的话,那么就会调用对象里的 install 方法,如果是函数就会调用这个函数。无论是调用对象的 install 方法还是调用函数的方式,它们都会收到两个参数:1是由 Vue 的 createApp 生成的 app 对象,2是用户传入的参数。

下面我们从最简单的一个i18n功能开始。

一般我们都会把插件放在plugins文件夹下,这样易于维护和管理

我们创建一个i18n.js文件

export default {
  install: (app, options) => {
    // 编写插件代码
  }
}

比如我们需要一个全局的函数来翻译整个程序,我们可以将方法挂在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来提供功能或者属性,比如,我们可以允许应用程序访问 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[i18n] 注入到一些页面或者组件中来访问该对象。

因为,Vue给我提供了app对象作为插件的第一个参数,所以插件可以使用所有其他功能,例如使用 mixin 和 directive。要了解有关 createApp 和应用程序实例的更多信息,请查看 Application API 文档。

比如下面我们在插件内,又注册了新的自定义指令,还有全局的mixin方法:

// 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 ...
      }
      //...
    })
  }
}

使用插件

上面我们编写完插件后,我们就可以去使用插件了。在Vue中使用插件也是非常简单,我们可以通过使用 use() 方法将插件添加到我们的应用中。

use() 方法有两个参数。第一个是要安装的插件。

第二个参数是可选的,我们可以传一些自定义参数给插件。

// main.js
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')

最后我们在页面中使用这个插件:

<template>
  <h1>{{ $translate("greetings.hi") }}</h1>
  <div>i18n插件示例</div>
</template>

最终显示:

总结

参考:https://v3.cn.vuejs.org/guide/plugins.html

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 使用vue-cli编写vue插件的方法

    利用vue组件创建模板,使用webpack打包生成插件再全局使用 1.vue init webpack-simple 生成项目目录 2.调整目录结构 3.修改webpack.config.js var path = require('path') var webpack = require('webpack') module.exports = { entry: './src/index.js', output: { path: path.resolve(__dirname, './dist')

  • 关于vue3编写挂载DOM的插件问题

    vue3 跟 vue2 相比,多了一个 app 的概念,vue3 项目的创建也变成了 // main.js import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' const app = createApp(App) app.use(ElementPlus) // 使用饿了么框架 app.mount('#app') 所以 Vue.extend 也没有了.

  • 基于Vuejs和Element的注册插件的编写方法

    1.首先要在HTML文档中引入jQuery版本2.0以下的.一个vuejs库 一个Element-UI库 <script src="js/jquery-1.11.0.min.js"></script> <script src="js/vue.js"></script> <script src="js/Element-UI.js"></script> 2.HTML的布局  &l

  • 详解使用webpack打包编写一个vue-toast插件

    本文介绍了使用webpack打包编写一个vue插件,分享给大家.具体如下: 一.说明: 需求:创建一个toast插件 思路:利用vue组件创建模板,使用webpack打包生成插件再全局使用. # 项目目录: |_ package.json |_ webpack.config.js |_ .babelrc |_ dist |_ src |_ index.html |_ lib |_ index.js |_ vue-toast.vue 1.1 webpack基础 1.基础插件 - html-webp

  • vue购物车插件编写代码

    本文实例为大家分享了vue购物车插件的具体代码,供大家参考,具体内容如下 先上效果图 下面相关代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello MUI</title> <meta name="viewport" content="width=device-width, initial-sca

  • vuex 中插件的编写案例解析

    1.第一步 const myPlugin = store => { // 当 store 初始化后调用 store.subscribe((mutation, state) => { // 每次 mutation 之后调用 // mutation 的格式为 { type, payload } }); }; 2.第二步 const store = new Vuex.Store({ // ... plugins: [myPlugin] }); 二.编写一个打印日志的插件 1.函数的书写 import

  • 一篇文章告诉你如何编写Vue插件

    目录 什么是插件 编写插件 使用插件 总结 什么是插件 在Vue框架中,如果需要给Vue增加一些我们需要的功能,Vue给我留了一个插件的方式,我们可以编写自己的插件,然后在Vue中去注册插件,然后去使用他. 通过Vue插件我们可以实现一些Vue框架没有的功能,也可以使用别人写好的插件,来帮助我们更快速的实现一些功能. 插件的功能范围并没有严格的要求,根据官方的示例来说,一般有下面几种: 1.添加全局方法或者属性,如:vue-custom-element,我们可以用插件方式添加一些全局组件,然后可

  • 一篇文章告诉你如何实现Vue前端分页和后端分页

    目录 1:前端手写分页(数据量小的情况下) 2:后端分页,前端只需要关注传递的page和pageSize 总结 1:前端手写分页(数据量小的情况下) 前端需要使用slice截取: tableData((page-1)pageSize,pagepageSize) 2:后端分页,前端只需要关注传递的page和pageSize 3:前端手写分页按钮 <body> <div id="app"> <table class="table table-bord

  • 一篇文章告诉你JAVA Mybatis框架的核心原理到底有多重要

    目录 持久层的那些事 什么是 JDBC JDBC 原理 什么是 Mybatis Mybatis 与 JDBC 的关系 SqlSession SqlSessionFactory SqlSessionFactoryBuilder Configuration MappedStatement Executor ParameterHandler StatementHandler ResultSetHandler Interceptor Mybatis 关键词说明 Mybatis 架构设计 基础支持层 反射

  • 一篇文章带你搞懂VUE基础知识

    目录 VUE是什么 Vue中的核心插件 Vue Router Vuex axios element-ui Vue前端整体架构 总结 VUE是什么 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合.另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动. Vue使用了双向数据绑定,即

  • 一篇文章带你搞懂Vue虚拟Dom与diff算法

    前言 使用过Vue和React的小伙伴肯定对虚拟Dom和diff算法很熟悉,它扮演着很重要的角色.由于小编接触Vue比较多,React只是浅学,所以本篇主要针对Vue来展开介绍,带你一步一步搞懂它. 虚拟DOM 什么是虚拟DOM? 虚拟DOM(Virtual   Dom),也就是我们常说的虚拟节点,是用JS对象来模拟真实DOM中的节点,该对象包含了真实DOM的结构及其属性,用于对比虚拟DOM和真实DOM的差异,从而进行局部渲染来达到优化性能的目的. 真实的元素节点: <div id="wr

  • 一篇文章告诉你如何用python进行自动化测试,调用c程序

    目录 一.介绍 二.方法 三.示例 windows平台 1.编写搭建动态库c函数 2.python导入库 3.结果 linux平台 1.编写c程序 2.编译成so动态库 3.编写python导入库 4.执行 总结 一.介绍 python可以做测试c的程序, 用到ctypes模块 ctypes 有以下优点: Python内建,不需要单独安装 可以直接调用二进制的动态链接库 在Python一侧,不需要了解Python内部的工作方式 在C/C++一侧,也不需要了解Python内部的工作方式 对基本类型

  • 一篇文章教你简单使用Vue的watch侦听器

    目录 侦听器watch  格式 设置侦听器: 总结 侦听器watch  函数名就是要侦听的元素的名字 传入的参数第一个是变化后的新值newval,第二个是变化前的旧值oldval  格式 方法格式的侦听器 无法在刚进入页面时自动触发,只有在侦听到变化才会触发 如果侦听的是对象,当对象的属性发生变化时,不会侦听到 对象格式的侦听器 通过immediate选项,可以让侦听器自动触发 通过deep选项,使侦听器深度侦听到对象中属性的变化 这是Vue实例中的data对象: 设置侦听器: 下面分别是方法格

  • 一篇文章告诉你Vue3指令是如何实现的

    目录 前言 指令注册 全局注册 组件内注册 指令搜寻 指令搜寻的时机 指令搜寻的逻辑 指令绑定VNode 指令调用 关于指令的思考 组件上使用指令 组件上的一些使用场景 总结 前言 Vue 指令 是指 对普通DOM元素进行底层操作的JS对象, 它们会被挂在Element VNode对象上,在Element VNode的一些生命周期中会被调用,从而可以操作Element VNode的底层DOM元素. 指令注册 指令注册 是指将指令对应的JS代码放置在某些地方,需要使用的时候可以在这些地方进行查找.

  • 一篇文章告诉你如何用Python控制Excel实现自动化办公

    目录 1.安装 2.操作一个简单的Excel文档 3. 操作简单Excel文档并添加数据格式 4.Excel中添加不同类型的数据 5.Excel中添加数据图表 最后:可能给予你助力的教程 总结 1.安装 2.操作一个简单的Excel文档 操作注释及代码: 操作完成后,数据存储结果如下: 3. 操作简单Excel文档并添加数据格式 操作代码如下: 附带数据格式的定义 操作效果如图所示: 4.Excel中添加不同类型的数据 操作代码如下: 将不同的数据按照指定的格式添加到文件中 代码执行结果如下:

随机推荐