首页 > 其他分享 >对比Vue2/Vue3项目如何自定义插件

对比Vue2/Vue3项目如何自定义插件

时间:2024-06-22 11:00:40浏览次数:12  
标签:... 插件 Vue 自定义 app vue Vue2 import 全局

学习目标:

  • 对比Vue2/Vue3项目如何自定义插件

学习内容:

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码。

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

插件没有严格定义的使用范围,插件发挥作用的常见场景我们在下面分别以Vue2和Vue3项目的不同做一个稍详细的讲解。

我的理解:

1. install()方法通常是自定义插件的必备部分,在该方法中接收2个参数,应用实例和options对象参数

2.在install()方法中可以添加全局混入、全局组件、全局方法、自定义指令等等...

3.在main.js中通过Vue.use()app.use()的方式调用传入install()的参数

请往下看ˇ


展示Vue2写法:

官方说法:插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制——一般有下面几种:

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

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

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

  4. 添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。

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

// vue2项目
// main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import MyPlugin from '@plugin/my-plugin.js'

// 调用 `MyPlugin.install(Vue)`
Vue.use(MyPlugin)

// 也可以传入一个可选的选项对象
Vue.use(MyPlugin, { someOption: true })

new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

// MyPlugin.js

// 引入自定义的组件,Vue.component挂载到全局上
import AnalyticLink from '@component/AnalyticLink.vue'
class MyPlugin {
  // 这个区域可以定义方法,Vue.prototype挂载到全局上
  atRocity(row) { }
  install(Vue, options) {
    let pluginThis = this
    // 1. 添加全局方法或 property
    Vue.myGlobalMethod = function () {
      // 逻辑...
    }
    // 2. 添加全局自定义指令
    Vue.directive('my-directive', {
      bind(el, binding, vnode, oldVnode) {
        // 逻辑...
      }
      // ...
    })
    // 3. 注入组件选项
    Vue.mixin({
      created: function () {
        // 逻辑...
      }
      // ...
    })
    // 4. 全局添加实例方法
    Vue.prototype.$atRocity = function (...args) {
      return pluginThis.atRocity(...args)
    }
    // 5.绑定全局组件
    Vue.component('AnalyticLink', AnalyticLink)
  }
}

export default new MyPlugin()

展示Vue3写法:

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

  1. 通过 app.component() 和 app.directive() 注册一到多个全局组件或自定义指令。

  2. 通过 app.provide() 使一个资源可被注入进整个应用。

  3. 向 app.config.globalProperties 中添加一些全局实例属性或方法

  4. 一个可能上述三种都包含了的功能库 (例如 vue-router)。

// Vue3项目
// main.js

import { createApp } from 'vue';
import App from './App.vue';
import router from './router';
import MyPlugin from '@plugin/my-plugin.js'

const app = createApp(App);

app.use(MyPlugin)
app.use(router);
app.mount('#app');
// 引入自定义的组件,app.component挂载到全局上
import AnalyticLink from '@component/AnalyticLink.vue'
class MyPlugin {
  // 这个区域可以定义方法,app.prototype挂载到全局上
  atRocity(row) { }
  install(app, options) {
    let pluginThis = this
    // 1.绑定全局组件
    app.component('AnalyticLink', AnalyticLink)
    // 2. 添加全局自定义指令
    app.directive('my-directive', {
      bind(el, binding, vnode, oldVnode) {
        // 逻辑...
      }
      // ...
    })
    // 3. globalProperties方式全局添加实例方法
    app.config.globalProperties.$atRocity = function (...args) {
      return pluginThis.atRocity(...args)
    }
    // 4.provide方式全局添加实例方法
    app.provide('$atRocity', (...args)=> {
      return pluginThis.atRocity(...args)
    })
  }
}

export default new MyPlugin()
<!-- about.vue -->
<template>
  <div>about</div>
</template>
<script setup>

// 如下调用即可
import { inject } from 'vue'
const $atRocity = inject('$atRocity')
$atRocity()

</script>

如有不足,欢迎指正。

不要忽视你达成的每个小目标,它是你前进路上的垫脚石。冲!

标签:...,插件,Vue,自定义,app,vue,Vue2,import,全局
From: https://blog.csdn.net/qq_54548545/article/details/139854062

相关文章

  • WordPress插件:子比zibll主题插件 炙焰美化全开源插件V3.2
    在网络世界中,开源内容管理系统(CMS)已经成为了网站构建的关键工具之一。WordPress,作为最受欢迎的开源CMS之一,其广泛的应用及其灵活性使得它成为了创建和管理各种类型网站的理想选择。而Zibll主题插件,作为专为WordPress设计的主题插件,其丰富的功能更是让用户在创建和定制网站......
  • SpringBoot+AOP+Redis自定义注解实现防重复提交
    1.哪些因素会引起重复提交?开发项目过程中可能会出现下面这些情况:前端下单按钮重复点击导致订单创建多次网速等原因造成页面卡顿,用户重复刷新提交请求黑客或恶意用户使用Postman等http工具重复恶意提交表单2.重复提交会带来哪些问题?重复提交带来的问题:会导致数据......
  • UE5笔记-实现Lumen实时渲染GI下的的类UCanvasRenderTarget实现多场景/自定义分辨率/方
    默认的SceneCapture不能用于实时Lumen光照模式下为了实现实时渲染GI下的的类似于UCanvasRenderTarget2D类.可以参考GameViewport类的源码尝试使用UE的渲染逻辑和数据多渲染一份视口副本到直接的FSceneView上,封装一份UCaptureRenderTarget出来从而实现一些例如自定义分辨率的......
  • 一文读懂Java线程池之自定义线程池、设置合适的线程数量、线程池阻塞队列、线程拒绝策
    在上篇我们学习了线程池各个参数的含义,线程池任务处理流程,使用线程池的好处等内容,本篇我们学习如何创建一个适合我们业务的线程池。为此,我们有必要先学习一下如何大概确定我们线程池核心线程数、怎么设置阻塞队列的类型与大小、当线程池没有能力处理任务了该如何使用拒绝策略等......
  • 通义灵码上线 Visual Studio 插件市场啦!
    通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。通义灵码熟练掌握Java、Python、Go、C++等20......
  • 通义灵码上线 Visual Studio 插件市场啦!
    通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等能力,提供代码智能生成、研发智能问答能力。通义灵码熟练掌握Java、Python、Go、C++等20......
  • vscode python编程入门与插件推荐
    使用背景作者是一名ai测开工程师,工作环境中通常会使用到pythonshellpostgresql数据库jupyter,shh工具git版本控制等,因此向选用一个适合自己的文本编辑软件,经过长时间磨合,最终选择VScode作为我的工作软件优点内存占用率低,集成度高,开源免费插件推荐AI助手:codegeex此插件......
  • sqlalchemy根据字典kv自定义表结构
    根据数据的内容自动创建数据库表结构fromsqlalchemyimportcreate_engine,Column,Integer,String,Float,Booleanfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportsessionmaker,Mapped,mapped_columnBase=declarative_base()......
  • 最新扣子教程:如何导入扣子插件,完全免费Coze教程
    ......
  • 自定义组件获取接口数据
    <template><divclass="ting-title"><spanclass="text">{{text}}</span></div></template><script>exportdefault{name:'TingTitle',data:()=>{......