当前位置: 首页 > 科技观察

Vue3.0插件执行原理与实战

时间:2023-03-15 18:34:55 科技观察

一、编写插件Vue项目可以使用很多插件来丰富自己的功能,比如Vue-Router,Vuex...,那么多插件都是可供我们使用,为我们节省了大量的人力物力,这些插件开发出来了吗?我们是不是也想拥有自己的Vue插件呢,那我们就来展示一下如何编写自己的Vue插件吧。1.1包含install()方法的ObjectVue插件可以是一个包含install方法的Object对象。此时调用插件时,会调用install方法,如下所示:exportdefault{//接收两个参数//app:应用上下文的Example//options:插件输入的选项安装:(app,options)=>{console.log('app',app);console.log('选项',选项);//做一些处理//...}}1.2Vue插件也可以通过function的方式来做function函数。此时调用插件时会调用function函数本身,如下所示:exportdefaultfunctionTestPlugin(app,options){console.log('app',app);console.log('options',options);}2.使用插件上面已经说明了如何编写自己的插件。插件写好之后,就需要使用这些插件了。这些插件应该如何使用?它们的实用性看起来很简单,在applicationcontext的实例上提供了相应的使用方法。应用程序使用(插件,[选项]);//返回一个应用程序实例,因此它可以在链中添加新插件3.app.use()如何执行插件为什么app.use()可以使用这些插件??本着“知其然,知其所以然”的精神,让我们一起来探个究竟。对应的源码如下:functioncreateApp(rootComponent,rootProps=null){//...constinstalledPlugins=newSet();constapp=(context.app={//...use(plugin,...options){if(installedPlugins.has(plugin)){warn(`插件已应用于目标应用。`);}elseif(plugin&&shared.isFunction(plugin.install)){installedPlugins.add(plugin);plugin.install(app,...options);}elseif(shared.isFunction(plugin)){installedPlugins.add(plugin);plugin(app,...options);}else{warn(`Apluginmusteithereithereitherafunctionoranobjectwithan"install"`+`function.`);}returnapp;},//...});返回应用程序;};上面的代码很容易读懂,它实现了以下Things:使用Set结构体存储插件,当插件存在时抛出异常;通过判断是否有install方法或者是否为function来执行相应的插件;执行插件时,应用程序将以下实例和选项作为参数传入;