vue插件编写与实战

Cadence Virtuoso IC 618 中 LDO 仿真环境搭建与调试实战指南 在模拟集成电路设计中,LDO(低压差线性稳压器)的仿真验证是确保芯片电源稳定性的关键环节。其核心原理是通过误差放大器与功率管构成的反馈环路,在输入电压波动或负载变化时维持输出电压恒定。在 Cadence Virtuoso IC 618 平台上,工程师常面临 PDK 挂载、DC 收敛、环路稳定性及瞬态仿真等挑战。掌握这些仿真技术,能有效评估 LDO 的相位裕度、电源抑制比和瞬态响应,从而提升流片成功率。本文基于实际工程经验,系统梳理了从原理图搭建、仿真配置到结果解读的完整流程,并针对常见报错提供了排查链路,助 阅读详情

(点击上方公众号,可快速关注)

前言

热爱vue开发的同学肯定知道awesome-vue 这个github地址,里面包含了数以千计的vue开源插件,而这些插件大都来自第三方开发者们,是他们为vue社区提供了大量的技术支持和解决方案。本文立足vue开源的理念,主要为vue开发者讲解编写vue插件的方法和步骤,通过理论与实践相结合的方式来加深大家对vue插件编写的认识。

vue插件介绍

1. 插件与组件

在讲解插件之前,我们首先来了解下vue插件和组件的关系,在我们的vue项目中我们使用组件的频率往往会大于插件,关系如下图所示:

0?wx_fmt=png

在没有封装组件之前,如果不使用第三方插件,那么很多情况下我们会编写几个常用的组件来提供给页面使用,如Alert/Loading组件,而你可能需要在很多页面中引入并且通过components注册组件,但是像这样使用率很高的组件一般我们希望全局注册后直接就可以在相应页面使用,因此我们需要将他们封装成插件,比如像vux这样的ui组件库,即提供了组件功能也提供了某些全局注册的插件。

用一句话简单概括两者的关系就是:插件可以封装组件,组件可以暴露数据给插件。

2. 插件分类

0?wx_fmt=png

vue插件的编写方法一般分为4类,如上图所示。主要注册与绑定机制如下:

export default {
    install(Vue, options) {
        Vue.myGlobalMethod = function () {  // 1. 添加全局方法或属性,如:  vue-custom-element
            
            // 逻辑...
        
        }
        Vue.directive('my-directive', {  // 2. 添加全局资源:指令/过滤器/过渡等,如 vue-touch
            
            bind (el, binding, vnode, oldVnode) {                
                // 逻辑...
            
            }
            
            ...
        
        })

        
        Vue.mixin({
            created: function () {  // 3. 通过全局 mixin方法添加一些组件选项,如: vuex
                
                // 逻辑...
            
            }
            ...
        
        })    

        
        Vue.prototype.$myMethod = function (options) {  // 4. 添加实例方法,通过把它们添加到 Vue.prototype 上实现
            
            // 逻辑...
        
        }
    
    }
}

上方代码使用了es6部分语法列出了4种编写插件的方法,而install是注册插件主要调用的方法,包含了两个参数(Vue实例和自定义配置属性options),我们可以将以上代码存储到plugins.js中。

3. 插件使用

在plugins.js中我们仅仅编写了一个插件的空壳子,假如现在需要全局注册该插件,我们可以在入口文件,比如main.js中注册:

...

import Vue from 'vue'
import MyPlugin from './plugins/plugins.js'

Vue.use(MyPlugin);

...

通过全局方法 Vue.use() 即可使用该插件,其自动会调用install方法。Vue.use会自动阻止注册相同插件多次,届时只会注册一次该插件。

vue插件编写方法

上述我们提到了编写插件的4种方法,接下来我们对其一一进行讲解:

1. 添加全局方法或属性

export default {
    
    install(Vue, options) {
        Vue.$myName = '劳卜';
    
    }
}

在install方法中,我们直接在Vue实例上声明了$myName属性并进行了赋值,当该插件注册后只要存在Vue实例的地方你都可以获取到Vue.$myName的值,因为其直接绑定在了Vue实例上。

2. 添加全局资源

export default {
    install(Vue, options) {
        Vue.directive('focus', {
            bind: function() {}, // 当绑定元素插入到 DOM 中。
            
            inserted: function(el, binding, vnode, oldVnode) { 
                // 聚焦元素
                
                el.focus();
            
            },

            
            update: function() {},
            
            componentUpdated: function() {},
            
            unbind: function() {}
        
        });
    
    },
}

添加全局资源包含了添加全局的指令/过滤器/过渡等,上方代码我们通过Vue.directive()添加了一个全局指令v-focus,其主要包含了5种方法,其中inserted代表当绑定元素插入到 DOM 中执行,而el.focus()代表聚焦绑定的元素,这样如果我们在一个input输入框上绑定该指令就会自动进行focus聚焦。

其他directive提供的方法及用途可以参考:vue自定义指令

3. 添加全局mixin方法

export default {
    
    install(Vue, options) {
        
        Vue.mixin({
            
            methods: {
                
                greetingFn() {                    
                    console.log('greeting');
                
                }
            
            }
        
        });
    
    },
}

mixin代表混合的意思,我们可以全局注册一个混合,其会影响注册之后创建的每个 Vue 实例,上方代码注册后会在每个组件实例中添加greetingFn方法,在单文件组件中可以直接通过this.greetingFn()调用。当然如果实例中存在同名方法,则mixin方法中创建的会被覆盖,同时mixin对象中的钩子将在组件自身钩子之前调用。

4. 添加实例方法

export default {
    
    install(Vue, options) {
        
        Vue.prototype.$myName = '劳卜';
        
        Vue.prototype.showMyName = value => {            
            console.log(value);
        
        };
    
    },
}

添加实例方法是最常用的一种方法,其直接绑定在vue的原型链上,我们可以回想一下 JS 里的类的概念。实例方法可以在组件内部,通过this.$myMethod来调用。

5. 插件封装组件

上方4点只讲解了插件自身的4中编写方法,并没有涉及组件的内容,如果我们要在组件的基础上编写插件,我们可以使用Vue.extend(component)来进行,可以见下方loading插件实例。

loading插件

<!-- loading.vue组件 -->
<template>
    
    <div class="loading-box" v-show="show">
        
        <div class="loading-mask"></div>
        
        <div class="loading-content">
            
            <div class="animate"></div>
            
            <div class="text">{{text}}</div>
        
        </div>
    
    </div>
</template>

<script>
export default {
    
    props: {
        
        show: Boolean,
        
        text: {
          
            type: String,          
            default: '正在加载中...'
        
        },
    
    }
}
</script>

以上是一个loading.vue组件,省略了样式部分,在没有封装插件之前,我们只能通过import引入并注册到components对象中才能在页面中使用,如:

<template>
    
    <div>
        
        <loading :show="true"></loading>
    
    </div>
</template>

<script>
import Loading from './loading.vue'

export default {
    
    ...

    
    
    components: {
        
        Loading
    
    }

    
    
    ...
}
</script>

下面我们便来封装一下该组件:

// loading.js
import LoadingComponent from '../components/loading.vue'

let $vm

export default {
    
        install(Vue, options) {        
        if (!$vm) {            
            const LoadingPlugin = Vue.extend(LoadingComponent);
            
            
            $vm = new LoadingPlugin({
                
                el: document.createElement('div')
            
            });            
            
            document.body.appendChild($vm.$el);
        
        }

        
        
        $vm.show = false;        
        
        let loading = {
            
            show(text) {
                
                $vm.show = true;

                
                $vm.text = text;
            
            },
            
            hide() {
                
                $vm.show = false;
            
            }
        
        };        
        
        if (!Vue.$loading) {
            
            Vue.$loading = loading;
        
        }        
        
        // Vue.prototype.$loading = Vue.$loading;

        
        
        Vue.mixin({
            
            created() {                
                this.$loading = Vue.$loading;            
            }
        
        })
    
    }
}

以上我们新建一个loading.js文件,引入我们的loading.vue组件,然后通过Vue.extend()方法创建了一个构造器LoadingPlugin,其次我们再通过new LoadingPlugin()创建了$vm实例,并挂载到一个div元素上。最后我们需要通过document.body.appendChild($vm.$el)将其插入到DOM节点中。

当我们创建了$vm实例后,我们可以访问该实例的属性和方法,比如通过$vm.show就可以改变loading组件的show值来控制其显示隐藏。

最终我们通过Vue.mixin或者Vue.prototype.$loading来全局添加了$loading事件,其又包含了show和hide两个方法。我们可以直接在页面中使用this.$loading.show()来显示加载,使用this.$loading.hide()来关闭加载。

插件发布

插件编写完后我们的目的除了本地引用注册外,可能更希望发布到线上供他人或其他项目使用,因此我们需要了解插件发布的方法。

1. 发布准备

在发布插件前你需要一个npm账号,你可以访问:https://www.npmjs.com/ 进行注册

2. 发布命令

npm login
cd 目录
npm publish

拥有账号后,你需要在控制台输入npm login命令来登录你的账号,并且输入邮箱地址。然后打开你的插件目录,允许npm publish发布。最简单的一个插件目录如下:

3. 发布目录

├── lib // 插件源码
│   ├── components // 组件目录
│   │   └── loading.vue // 组件文件
│   └── index.js  // 插件入口文件
├── index.js // 入口文件
└── package.json  // 包管理文件

你可以在项目中安装刚刚的loading插件来进行参考,我已经发布至npm:

npm install super-loading --save

当然你也可以访问github仓库:https://github.com/luozhihao/super-loading 进行下载。

结语

本文的最终目的并不是教大家如何去编写一个loading插件,而是帮助大家了解在编写插件的过程中所使用的技巧和方法,只有掌握了技巧和方法才能写出各种各样的插件,正所谓水到自然渠成。

vue插件开发模版 开发vue插件的时候,使用vue-cli往往不够灵活。所以需要自己配置webpack,而webpack的配置又比较繁琐,每个插件复杂程度不同又配置各异,所以写一个基础的通用模版,开发vue插件的时候以此工程作为基石,开始开发。 立即下载

相关推荐

在win10-wsl2(ubuntu)中安装jlink

在 官方下载linux版本的deb包拷贝到ubuntu的/home目录下(其他目录也可以),进行安装然后提示很多依赖缺失的错误,此时执行自动安装需要的依赖包再次重新安装就可以啦查看是否安装成功,输入JLink 再按下两次Table键,是否如下所示这样表示安装成功了。

yaq_30401的博客 3136

vue插件编写

vue插件编写

weixin_45032067的博客 758

【AI基础学习系列】二十一、一文搞懂GPT

本文系统介绍了GPT(Generative Pre-trained Transformer)模型的核心内容。首先阐述了GPT的本质是基于Transformer的预训练语言模型,其创新在于使用单向Transformer编码器。其次详细解析了GPT架构,包括输入层的Tokenization和Embedding处理、Transformer解码器堆叠的核心组件(自注意力机制、前馈神经网络等)以及预训练和微调两阶段训练过程。接着说明了GPT的工作原理:通过无监督预训练学习语言统计规律,再结合有监督微调适应具体任务。

ASH_GUARDIAN的博客 1685

创建Vue插件(手动展示vue组件)

自定义vue插件

kkfake的博客 750

保姆级教程:用+86手机号成功注册Discord的三种亲测方法(附节点选择技巧)

本文提供了三种经过验证的方法,帮助用户使用+86手机号成功注册Discord,包括号码格式调整、网络环境优化和设备组合方案。同时详细解析了'手机号无效'报错的深层原因,并附上节点选择技巧,确保注册流程顺利。

weixin_42683394的博客 1890

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

手把手教您编写一个简单的vue3插件

插件是自包含的代码,通常向 Vue 添加全局级功能。你如果是一个对象需要有install方法Vue会帮你自动注入到install 方法 你如果是function 就直接当install 方法去使用.并在文件夹中新建.vue组件和一个index.js文件.vue文件作为自定义插件.组件就是把图形非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件。

BradenHan的专栏 2847

VS2022+Qt6保姆级环境配置指南:从插件安装到项目互通全流程

本文提供VS2022与Qt6深度整合的全流程指南,涵盖环境配置、插件安装、项目互通等关键步骤。详细解析编译器版本匹配、跨IDE协作方案及效能优化技巧,帮助开发者高效搭建C++界面设计开发环境,实现软件项目无缝互通。

zero1的博客 731

Vue实战指南:写一个简单的Vue插件示例

让我们从创建一个简单的自定义指令开始。这个指令将在元素插入 DOM 后自动聚焦该元素。// 当被绑定的元素插入到 DOM 中时……el.focus();// 聚焦元素});在这个插件中,我们定义了一个名为v-focus的自定义指令。当元素被插入 DOM 后,如果它是输入元素,则会自动获得焦点。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 2158

HDLbits找茬实战:5个Verilog仿真Bug修复案例,新手避坑指南

本文通过HDLbits平台上的5个典型Verilog仿真Bug案例,详细解析了多路选择器位宽不匹配、模块实例化端口映射错误等常见问题,提供实用的修复方案和调试技巧,帮助Verilog新手快速掌握代码验证与仿真技能,避免常见陷阱。

weixin_42653691的博客 162

Linux 4.19、Linux 5.10、Linux 6.1 三个版本详细分析

Linux 4.19发布日期:2018年10月22日LTS 状态:是长期支持版本,官方支持到2024年12月。Linux 5.10发布日期:2020年12月13日LTS 状态:LTS 版本,官方支持到2026年12月。Linux 6.1发布日期:2022年12月11日LTS 状态:不是官方的LTS版本,但通常社区会为新的版本提供一定时间的支持。定位:稳定性和长期支持,广泛应用于多种平台,尤其是嵌入式系统和服务器。主要优势:稳定性高,广泛的硬件支持,核心功能可靠。

小灰灰的博客 5951

Vue 插件编写

vue插件介绍 1. 插件与组件 在我们的vue项目中我们使用组件的频率往往会大于插件 在没有封装组件之前,如果不使用第三方插件,那么很多情况下我们会编写几个常用的组件来提供给页面使用,如Alert/Loading组件,而你可能需要在很多页面中引入并且通过components注册组件,但是像这样使用率很高的组件一般我们希望全局注册后直接就可以在相应页面使用,因此我们需要将他们封装成插件,比如像vu...

lucky___star的博客 662

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4716

Vue插件编写与实战

热爱Vue开发的同学肯定知道awesome-vue这个Github地址,里面包含了数以千计的Vue开源插件,而这些插件大都来自第三方开发者们,是他们为Vue社区提供了大量的技术支持和解决方案。本文立足Vue开源的理念,主要为Vue开发者讲解编写Vue插件的方法和步骤,通过理论与实践相结合的方式来加深大家对Vue插件编写的认识。全文阅读:Vue插件编写与实战 欢迎加入“优快云前端开发者”群,与...

u012996572的博客 797

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

vue java 插件开发_vue插件编写与实战

前言热爱vue开发的同学肯定知道awesome-vue这个github地址,里面包含了数以千计的vue开源插件,而这些插件大都来自第三方开发者们,是他们为vue社区提供了大量的技术支持和解决方案。本文立足vue开源的理念,主要为vue开发者讲解编写vue插件的方法和步骤,通过理论与实践相结合的方式来加深大家对vue插件编写的认识。vue插件介绍1. 插件与组件在讲解插件之前,我们首先来了解下vu...

weixin_34824634的博客 342

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

vue loading 插件编写与实战

  在没有封装组件之前,如果不使用第三方插件,那么很多情况下我们会编写几个常用的组件来提供给页面使用,如Alert/Loading组件,而你可能需要在很多页面中引入并且通过components注册组件,但是像这样使用率很高的组件一般我们希望全局注册后直接就可以在相应页面使用,因此我们需要将他们封装成插件。   vue插件的编写方法一般分为4类,如上图所示。主要注册与绑定机制如下: expo...

weixin_33953249的博客 198

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[Vue CLI 3] 插件编写实战和源码分析

当你看过了官方的几个插件之后,慢慢地,其实你也有需求了。 那如何编写一个 Vue CLI 3 的插件呢? 本文代码已经放到 github 上,地址:https://github.com/dailynodej... 我们建一个文件夹,取名 vue-cli-plugin-demo,创建一个 index.js module.exports =...

weixin_33901926的博客 148

vue插件编写与开发

vue插件编写与实战 转载于:https://www.cnblogs.com/knuzy/p/9778786.html

weixin_30662109的博客 90

Vue插件

Vue插件

qq_51626500的博客 461
上一篇: vue项目构建与实战
下一篇: 谈谈前端异常捕获与上报
劳卜
博客等级 码龄10年 5粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值