博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
组件:组件、方法和指令导出
阅读量:4092 次
发布时间:2019-05-25

本文共 2549 字,大约阅读时间需要 8 分钟。

目录


一、导出

index.js 文件

/** * 解析模块 * @param modulesList  模块对象列表 * @param type 模块类型,component 组件,function 方法,directive 指令 */const exportModule = (modulesList, type) => {    // 获取模块对象列表    let modules = modulesList.keys().reduce((obj, modulePath) => {        // 模块名        let moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1");        // 模块对象        let moduleObj = modulesList(modulePath);        // 放入模块        obj[moduleName] = moduleObj.default;        // 组件的单个导出        if(type === 'component') {            Object.assign(exports, { [moduleName]: moduleObj.default });        }        return obj;    }, {});    // 要导出的    let exportModules;    switch (type) {        case 'component': {            // 全局引入            exportModules = function (Vue, opts = {}) {                for (let i in modules) {                    Vue.component(i, modules[i]);                }            };            //支持使用标签方式引入            if (typeof window !== "undefined" && window.Vue) {                exportModules(window.Vue);            }            break;        }        case 'function': {            exportModules = modules;            break;        }        case 'directive': {            // 全局引入            exportModules = function (Vue, opts = {}) {                for (let i in modules) {                    Vue.directive(i, modules[i]);                }            };            break;        }        }    return exportModules;}// --- 组件 ---// 注意:require 不能放在方法里,无法识别const componentList = require.context("./src/components", true, /\.vue$/);const MyComponents = exportModule(componentList, 'component');// --- 方法 ---const functionList = require.context("./src/functions", true, /\.js$/);const MyFunctions = exportModule(functionList, 'function');// --- 指令 ---const directiveList = require.context("./src/directive", true, /\.js$/);const MyDirectives= exportModule(directiveList, 'directive');// 合并导出Object.assign(exports, {MyComponents}, {MyFunctions}, {MyDirectives});

二、使用

1、全局引入

main.js

import Vue from 'vue'import App from './App.vue'// 全局引入 - 指令(仅全局)import { MyDirectives } from 'my-webcomponents'// 方式一// MyDirectives(Vue);// 方式二Vue.use(MyDirectives);// 全局引入 - 组件(可全局或局部)import { MyComponents } from 'my-webcomponents';Vue.use(MyComponents);// 全局引入 - 方法(仅全局)import { MyFunction } from 'my-webcomponents';export default {    name: 'App'}new Vue({  render: h => h(App),}).$mount('#app')

2、局部引入

单 .vue 文件

import { MyLayerTree, MyToolBar } from 'my-webcomponents'export default {    components: {        MyLayerTree,        MyToolBar    },    // ...

 

 

转载地址:http://xanii.baihongyu.com/

你可能感兴趣的文章
Android Flutter混合编译
查看>>
微信小程序 Audio API
查看>>
[React Native]react-native-scrollable-tab-view(进阶篇)
查看>>
Vue全家桶+Mint-Ui打造高仿QQMusic,搭配详细说明
查看>>
React Native应用部署/热更新-CodePush最新集成总结(新)
查看>>
react-native-wechat
查看>>
基于云信的react-native聊天系统
查看>>
网易云音乐移动客户端Vue.js
查看>>
ES7 await/async
查看>>
ES7的Async/Await
查看>>
React Native WebView组件实现的BarCode(条形码)、(QRCode)二维码
查看>>
每个人都能做的网易云音乐[vue全家桶]
查看>>
JavaScript专题之数组去重
查看>>
Immutable.js 以及在 react+redux 项目中的实践
查看>>
Vue2.0全家桶仿腾讯课堂(移动端)
查看>>
React+Redux系列教程
查看>>
19 个 JavaScript 常用的简写技术
查看>>
微信小程序:支付系列专辑(开发指南+精品Demo)
查看>>
iOS应用间相互跳转
查看>>
iOS开发之支付宝集成
查看>>