使用use注册Vue全局组件和全局指令

本文介绍了如何在Vue中优雅地注册多个全局组件和指令,通过分离文件的方式避免根实例文件过于臃肿。

Vue中的组件和指令分为局部组件、局部指令和全局组件、全局指令。对于注册有一定数量的全局指令和全局组件时,官方文档中的方法就显得有些不够清爽了。

  • 全局组件
    在Vue官方文档中介绍的是使用Vue.component(tagName, options)来创建一个全局组件。但是这种方法是与根实例写在同一个文件中,如果要同时注册多个全局组件,就会使根实例文件过重,因此使用Vue.use()来“安装”全局组件,就显得更轻一些。
    方法:
    1.新建一个plugins文件夹
    2.在文件夹中创建放置全局组件的文件components.js
    3.在components.js文件中引入所有要注册的全局组件
    4.在app.js根实例文件中,引入components.js

    以eg组件为例:
    components.js:

import eg from '../components/eg.vue';
export default (Vue)=>{
    Vue.component("Eg",eg);
}

app.js:

import components from './plugins/components.js';
Vue.use(components);

经过上述编写后,就注册了全局组件Eg。

在需要注册多个全局组件的情况下,使用这种方式就显得更加清爽!

  • 全局指令
    对于全局指令的注册,官方文档给出的方法是使用Vue.directive(),位置同样是在根实例文件下,那么问题来了,如果多个全局指令,再加上多个全局组件,那么app.js文件将变得臃肿无比。
    因此,同上面的注册全局组件方法相似,也是使用Vue.use()来“安装”全局指令。
    方法:
    1.新建一个plugins文件夹
    2.在文件夹中创建放置全局组件的文件directives.js
    3.在directives.js文件中引入所有要注册的全局指令
    4.在app.js根实例文件中,引入directives.js

以v-focus指令为例:
directives.js:

export default (Vue)=>{
    Vue.directive("focus",{
        inserted:function(el){
            el.focus();
        }
    })
}

app.js

import directives from "./plugins/directives.js"
Vue.use(directives);

这样就注册了全局指令

使用`Vue.use`注册全局组件主要有以下步骤方法: ### 常规全局注册 在`main.js`中进行操作。首先引入组件,然后创建一个包含`install`方法的对象,在`install`方法里使用`Vue.component`注册组件,最后使用`Vue.use`调用该对象。示例代码如下: ```javascript import Vue from 'vue'; import PageTools from './components/PageTools'; const MyPlugin = { install(a) { console.log('install.....', a === Vue); // install..... true a.component('PageTools', PageTools); } }; Vue.use(MyPlugin); ``` 在此示例中,创建了一个名为`MyPlugin`的对象,其`install`方法接收一个参数`a`,实际上这个参数就是`Vue`构造器,在`install`方法里通过`a.component`将`PageTools`组件全局注册,之后使用`Vue.use(MyPlugin)`触发`install`方法完成注册 [^3]。 ### 优化全局注册 可将组件注册逻辑单独放在一个`js`文件中。在一个`js`文件夹下创建文件,引入组件并导出一个包含`install`方法的对象。示例代码如下: ```javascript // 假设该文件名为 componentRegister.js import PageTools from './PageTools'; export default { install: function(Vue) { Vue.component('PageTools', PageTools); } }; ``` 然后在`main.js`中引入并使用`Vue.use`注册: ```javascript import Vue from 'vue'; import componentRegister from './componentRegister'; Vue.use(componentRegister); ``` 这样将组件注册逻辑分离,使`main.js`代码更简洁,提高了代码的可维护性 [^4]。 ### 统一全局注册组件插件 如果有一个组件插件对象,使用`Vue.use`可以把`components`中的所有组件都统一完成全局注册。当调用`Vue.use(componentPlugin)`时,插件中`install`方法会自动执行,并且该方法会拿到一个实参`Vue`,在`install`方法里执行具体逻辑,使用`Vue.component`将组件全局注册 [^1]。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值