Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[vue] 如何批量引入组件? #2084

Open
haizhilin2013 opened this issue Mar 16, 2020 · 2 comments
Open

[vue] 如何批量引入组件? #2084

haizhilin2013 opened this issue Mar 16, 2020 · 2 comments
Labels
vue vue

Comments

@haizhilin2013
Copy link
Collaborator

如何批量引入组件?

我也要出题

@haizhilin2013 haizhilin2013 added the vue vue label Mar 16, 2020
@webVueBlog
Copy link

vue中全局和局部引入批量组件方法

一、全局批量引入

创建一个.js文件,并在main.js中引入即可。

import Vue from "vue"
import upperFirst from "lodash/upperFirst"
import camelCase from "lodash/camelCase"
const requireComponent = require.context(
    './', //组件所在目录的相对路径
    false, //是否查询其子目录
    /Base[A-Z]\w+\.(vue|js)$/ //匹配基础组件文件名的正则表达式
)
requireComponent.keys().forEach(fileName=>{
    // 获取文件名
    var names = fileName.split("/").pop().replace(/\.\w+$/,"");//BaseBtn
    // 获取组件配置
    const componentConfig = requireComponent(fileName);
    // 若该组件是通过"export default"导出的,优先使用".default",
    // 否则退回到使用模块的根
    Vue.component(names,componentConfig.default || componentConfig);
})

二、局部批量引入

<template>
    <div>
        <component v-bind:is="isWhich"></component>
    </div>
</template>
<script>
// 引入所有需要的动态组件
const requireComponent = require.context(
  "./", //组件所在目录的相对路径
  true, //是否查询其子目录
  /\w+\.vue$/ //匹配基础组件文件名的正则表达式
);
var comObj = {};
requireComponent.keys().forEach(fileName => {
  // 获取文件名
  var names = fileName
    .split("/")
    .pop()
    .replace(/\.\w+$/, "");
  // 获取组件配置
  const componentConfig = requireComponent(fileName);
  // 若该组件是通过"export default"导出的,优先使用".default",否则退回到使用模块的根
  comObj[names] = componentConfig.default || componentConfig;
});
export default {
  data() {
    return {
        isWhich: ""
    }
  },
  mounted() {},
  components: comObj
};
</script>

三、动态组件使用方法

<keep-alive>
    <component :is="isWhich"></component>
</keep-alive>

使用标签保存状态,即切换组件再次回来依然是原来的样子,页面不会刷新,若不需要可以去掉。

通过事件改变is绑定的isWhich值即可切换成不同的组件,isWhich的值为组件名称。

@forever-z-133
Copy link

forever-z-133 commented Mar 17, 2020

require.context 或 import 函数(非关键字)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
vue vue
Projects
None yet
Development

No branches or pull requests

3 participants