一、Vue.use()的作用
Vue.use()是Vue.js提供的一个全局方法,用于给Vue应用安装插件,它需要在使用插件之前被调用。
Vue插件通常会为Vue应用增加全局功能或者为Vue添加全局组件、指令和混入等。正因为 Vue.use() 只需被调用一次,并具有全局效果,所以若我们想在整个应用程序中使用某个插件,则可以使用这个方法将插件安装到Vue中。
// 例如,安装 vue-router 插件:
import { createRouter, createWebHashHistory } from 'vue-router'
import App from './App.vue'
const router = createRouter({
history: createWebHashHistory(),
routes,
})
const app = createApp(App)
// 我们可以通过 Vue.use() 来安装插件。
app.use(router)
// 在这之后可以使用VueRouter来router-link等
app.mount('#app')
二、Vue.use()的实现
Vue.use() 是 Vue.js 官方提供的一个插件安装方法。在使用 Vue.use() 安装插件的时候,Vue.js 通过调用插件暴露出来的 install 静态方法来实现插件的安装。因此,如果我们的插件想被使用,我们必须要提供一个具备 install 方法的对象。下面是一个简单的例子:
// 引入插件
import myPlugin from 'myPlugin'
// createApp,createRouter等是工厂函数,用于创建api
import { createApp } from 'vue'
// 创建Vue app
const app = createApp()
// 使用插件
app.use(myPlugin)
// 调用 install 方法
myPlugin.install(app)
三、Vue.use()与组件注册
Vue.use() 安装插件时允许第二个可选参数 options,该参数需要有 install 方法,options.install 方法将在插件安装时被调用。在 Vue.use(plugin, options) 调用时,会将 options 与 plugin 作为参数传递给plugin.install 方法。我们可以利用 options 传递选项,例如组件库中某个组件的默认属性。
下面是一个示例,展示如何在Vue应用中使用自定义组件库。
// 引入组件库
import MyComponentLibrary from 'my-component-library'
import { createApp } from 'vue'
import App from './App.vue'
// 传递选项
const options = {
name: 'my-component',
color: 'blue'
}
// 创建Vue app
const app = createApp(App)
// 使用组件库
app.use(MyComponentLibrary, options)
// 渲染组件
app.mount('#app')
四、Vue.use()与插件的生命周期钩子
Vue.use() 方法安装插件时会自动调用插件的 install 钩子函数,该钩子函数在插件加载时只会被调用一次,它接收一个 Vue 的类作为第一个参数,以及一个可选项的对象作为第二个参数,代码如下
MyPlugin.install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
// 逻辑...
}
// 2. 添加全局资源
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
// 逻辑...
}
...
})
// 3. 注入组件选项
Vue.mixin({
created () {
// 逻辑...
}
...
})
// 4. 添加实例方法
Vue.prototype.$myMethod = function (methodOptions) {
// 逻辑...
}
}
五、Vue.use()与插件的导出模式
插件可以在不同的环境下使用相同的代码,可以用 CommonJS, ES modules 或 AMD 的方式导出。此外,插件需要支持 Vue.js 以原型对象为中心的插件 API,例如 Vue.directive、Vue.mixin、Vue.extend 和 Vue.component。
作为 Vue.js 插件的编写者,我们通常需要把插件同时打包成 CommonJS 和 ES modules 的两种格式,这样可以让插件支持更多的构建工具。
// 使用 ES module 暴露接口
import MyPlugin from './my-plugin.js'
export default MyPlugin
// 使用 CommonJS 暴露接口
var MyPlugin = require('./my-plugin.js')
module.exports = MyPlugin