Vue 以插件方式注册全局组件

组件

分别定义 3 个组件,放在 src/components 目录下

AComponents.js

<template>
    <h1>这是 A 组件.</h1>
</template>
<script>
export default {
    name: 'AComponents'
}
</script>

BComponents.js

<template>
    <h1>这是 B 组件.</h1>
</template>
<script>
export default {
    name: 'BComponents'
}
</script>

 CComponents.js

<template>
    <h1>这是 C 组件.</h1>
</template>
<script>
export default {
    name: 'CComponents'
}
</script>

 导出

文件名为 requireComponent.js,放是 src/js 目录下

CommonJS 方式

 还有一种写法,请移步《exports 和 module.exports (自用,小技巧)

module.exports =  {
    install: function(Vue, opts) {
        debugger
        // 其组件目录的相对路径, 是否查询其子目录, 匹配基础组件文件名的正则表达式
        let requireComponent = require.context('../components', false, /\.vue$/);
        // 循环注册
        requireComponent.keys().forEach(fileName => {
            // 获取组件配置
            let componentConfig = requireComponent(fileName);
            // 获取组件对象: 如果这个组件选项是通过 `export default` 导出的,那么就会优先使用 `.default`,否则回退到使用模块的根。
            let component = componentConfig.default || componentConfig;
            // 全局注册组件:注意组件必须有 name,且与文件名相同
            Vue.component(component.name, component);            
        })
    }
}

ES6 方式

export default {
    install: function(Vue, opts) {
        debugger
        // 其组件目录的相对路径, 是否查询其子目录, 匹配基础组件文件名的正则表达式
        let requireComponent = require.context('../components', false, /\.vue$/);
        // 循环注册
        requireComponent.keys().forEach(fileName => {
            // 获取组件配置
            let componentConfig = requireComponent(fileName);
            // 获取组件对象: 如果这个组件选项是通过 `export default` 导出的,那么就会优先使用 `.default`,否则回退到使用模块的根。
            let component = componentConfig.default || componentConfig;
            // 全局注册组件:注意组件必须有 name,且与文件名相同
            Vue.component(component.name, component);            
        })
    }
}

导入

注意些在 main.js 文件中,下段话直接从Vue 教程中拷贝

记住全局注册的行为必须在根 Vue 实例 (通过 new Vue) 创建之前发生这里有一个真实项目情景下的示例。

CommonJS 方式

const requierComponents = require("./js/requierComponents")

 main.js 中的完整写法: 

import Vue from 'vue'
import App from './App.vue'
import router from './router'

const requierComponents = require("./js/requierComponents")
Vue.use(requierComponents)

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

ES6 方式

import requierComponents from './js/requierComponents'

 main.js 中的完整写法:

import Vue from 'vue'
import App from './App.vue'
import router from './router'

import requierComponents from './js/requierComponents'
// const requierComponents = require("./js/requierComponents")
Vue.use(requierComponents)

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

使用

<template>
	<div class="index">
		<a-components></a-components>
		<b-components></b-components>
		<c-components></c-components>
		<d-components></d-components>
	</div>
</template>
<script>
export default {
	data() {
		return {
			
		}
	}
}
</script>

效果 

总结

1. 这里有两大知识点 Vue组件全局注册 和 Vue 插件开发,写成插件可用打包使用;

2. 两种导入导出方式:CommonJS 和 ES6;

3. 注意 export default 只能使用 import 导入;

4. module.exports 使用 import 和 require 导出都可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值