vue:vue2与vue3如何全局注册公共组件(包括涉及到的相关方法函数的讲解)

目录

第一章 vue2全局注册公共组件

1.1 方法一:逐个注册

1.2 方法二:批量注册

1.2.1 require.context()方法解释

第二章 vue3全局注册公共组件

1.1 方法一:逐个注册

1.2 方法二:批量注册


第一章 vue2全局注册公共组件

Vue.component() // vue2注册组件的方法

1.1 方法一:逐个注册

import BreadCrumbs from '@/components/BreadCrumbs.vue'
import HomeBanner from '@/components/HomeBanner.vue'
import HomeBottom from '@/components/HomeBottom.vue'
import TabChange from '@/components/TabChange.vue'
import NewTabs from '@/components/NewTabs.vue'
……export default {// vue2自带的方法install: function (Vue) {// 注册全局容器Vue.component('BreadCrumbs', BreadCrumbs)Vue.component('HomeBanner', HomeBanner)Vue.component('HomeBottom', HomeBottom)Vue.component('TabChange', TabChange)Vue.component('NewTabs', NewTabs)……},
}// 引入公共主键(上面的方法在该文件下)
import components from '@/plugin/components'// 使用公共组件
Vue.use(components)

1.2 方法二:批量注册

import Vue from 'vue'// vue2方法 ——> 自动注册全局组件
const componentsContext = require.context('./', true, /\.vue$/)componentsContext.keys().forEach((component) => {const componentConfig = componentsContext(component)/*** 兼容 import export 和 require module.export 两种规范*/const ctrl = componentConfig.default || componentConfigVue.component(ctrl.name, ctrl)
})
  • require.context()方法官网:

require-context - npm

1.2.1 require.context()方法解释

const componentsContext = require.context('./', true, /\.vue$/)console.log('componentConfig', componentsContext)
console.log('require',require.prototype)

  • 通过控制台中打印require,发现require其实就是就是一个函数
  •  通过require的原型,发现require的方法有三个属性:id、key、resolve
  • 属性解释:
  1. resolve:是一个函数,并返回已解析请求的模块id
  2. key:函数是否返回上下文模块可以处理的所有可能请求的数组
  • require.context(directory,useSubdirectories,regExp)参数介绍:
  1. directory:表示要检索的目录
  2. useSubdirectories:表示是否检索目录下的子文件夹
  3. regExp:匹配文件的正则表达式,一般是文件名
  • 例如:
require.context('./', true, /\.vue$/) // 匹配该文件夹下.vue后缀的文件夹

第二章 vue3全局注册公共组件

app.component() // vue3注册组件的方法

1.1 方法一:逐个注册

import BreadCrumbs from '@/components/BreadCrumbs.vue'
import HomeBanner from '@/components/HomeBanner.vue'
import HomeBottom from '@/components/HomeBottom.vue'
import TabChange from '@/components/TabChange.vue'
import NewTabs from '@/components/NewTabs.vue'
……import { createApp } from 'vue'const app = createApp(App)registerVantComponent(app)export default {registerVantComponent: function (app) {// 注册全局容器app.component('BreadCrumbs', BreadCrumbs)app.component('HomeBanner', HomeBanner)app.component('HomeBottom', HomeBottom)app.component('TabChange', TabChange)app.component('NewTabs', NewTabs)……},
}

1.2 方法二:批量注册

  • 方案一:

import { defineAsyncComponent } from 'vue'/*** @description 自动将 ./src/components/global 下的组件注册成为全局组件* @param  app 当前应用实例* @returns {void} void*/const components = import.meta.glob('./*.vue')export function registerGlobalComponent(app) {// 组件注册成为全局组件for (const [key, value] of Object.entries(components)) {const name = key.slice(key.lastIndexOf('/') + 1, key.lastIndexOf('.'))app.component(name, defineAsyncComponent(value))}
}
  • 方案二: 

/*** @description 自动将 ./src/components/global 下的组件注册成为全局组件* @param  app 当前应用实例* @returns {void} void*/export function registerGlobalComponent(app) {// 组件注册成为全局组件const components = import.meta.globEager('./*')for (const path in components) {if (path.includes('.vue')) {let componentName = path.match(/(.*)\.vue$/)[1]if (componentName.includes('./')) {componentName = componentName.replace('./', '')}const component = components[path].defaultapp.component(componentName, component)}}
}
  • 针对于vue3的批量注册小编提供了两种方案(注意vue3不支持require方法了),思路与vue2注册是一致的,都可行的,但是小编更推荐方案一,因为方案二小编在项目上线的过程中遇到了低版本手机不兼容导致项目不兼容跑不动的bug
  • import.meta.glob()是一个 ES 模块的特殊属性,用于动态导入多个模块,该方法接受一个模式字符串作为参数,并返回promise,该Promise 析为一个对象,该对象包含匹配该模式的所有模块的键值对
  • 该例子中:import.meta.glob('./*.vue') —— './' 表示同目录下(也可以自定义其他目录)'*' 表示任意名称'.vue' 后缀
  • import.meta.globEager() 是 Webpack 5 和 Deno 这样的现代 JavaScript 环境中引入的一个特性,用于异步加载模块和文件。meta 属性是 ES2020 中引入的,它允许直接访问到 import 语句的元信息,包括导入路径列表。globEager 是对 import.meta.glob 的增强版本,它提供了立即同步加载所有匹配给定模式(如 **/*.js)的模块的能力。但是这个特性并非浏览器原生支持,而是由一些工具如 Vite 或 Deno 提供的扩展在使用浏览器环境中尝试使用它,可能会遇到兼容性问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31839.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C++][数据结构][跳表]详细讲解

目录 0.什么是跳表?1.SkipList的优化思路2.SkipList的效率如何保证?3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表? SkipList本质上也是一种查找结构,用于解决算法中的查找问题,跟平衡搜索树…

Linux测试服务器端口是否打开

前言 服务器端口在计算机网络通信中扮演着至关重要的角色,其作用可以归纳如下: 区分不同的应用程序或服务: 服务器端口用于标识和定位不同应用程序或服务在服务器上的通信入口。 通过不同的端口号,服务器可以同时运行多个应用程…

73. UE5 RPG 优化投射物以及敌人生成

解决发射物会与地面产生交互的问题 之前一直遇到发射物的体积过大会在发射时,和地面产生交互,我们可以调整小一些,然后为了防止它和自身产生交互事件。我们可以实现它在生成后,不会触发相关事件,而是在一定时间后。 对…

【STM32--Cortex-M3】

STM32-Cortex-M3 ■ Cortex-M3 处理器内核到基于Cortex-M3的MCU■ ARM的各种架构版本■ 指令集■ Cortex-M3简介■ Cortex-M3寄存器组■ Cortex-M3■ Cortex-M3■ Cortex-M3 ■ Cortex-M3 处理器内核到基于Cortex-M3的MCU Cortex-M3处理器内核是单片机的中央处理单元&#xff…

WordPress简单好看的线报主题模板源码

安装说明 到WordPress管理后台中的「外观」-「主题」中点击「添加」,选择baolog的主题包进行上传安装并启用即可。 提示:为了防止主题不兼容,请在安装主题前进行数据备份,防止数据字段重复覆盖等情况发生。 源码截图 源码下载 …

三种方式实现人车流统计(yolov5+opencv+deepsort+bytetrack+iou)

一、运行环境 1、项目运行环境如下 2、CPU配置 3、GPU配置 如果没有GPU yolov5目标检测时间会比较久 二、编程语言与使用库版本 项目编程语言使用c++,使用的第三方库,onnxruntime-linux-x64-1.12.1,opencv-4.6.0 opencv 官方地址Releases - OpenCV opencv github地址ht…

http发展史(http0.9、http1.0、http1.1、http/2、http/3)详解

文章目录 HTTP/0.9HTTP/1.0HTTP/1.1队头阻塞(Head-of-Line Blocking)1. TCP 层的队头阻塞2. HTTP/1.1 的队头阻塞 HTTP/2HTTP/3 HTTP/0.9 发布时间:1991年 特点: 只支持 GET 方法没有 HTTP 头部响应中只有 HTML 内容&#xff0…

七、yolov8图像标注和模型训练(目标检测)

环境配置方法:点这里 环境配置完毕后,需要进行标注工作和训练任务,以下分两个部分进行。 图片标注 1、按照以下的格式,将图片放入images中。(不限制文件夹路径) 2、然后下载labelme标注工具&#xff0…

循环赛日程表

描述 n 2 ^ k个选手 每个选手必须与其他n-1个选手各赛一次每个选手一天赛一次比赛打n-1天 思路 k 3时的解 我们先进行假设:每个选手第一天和自己比,然后分解成4个子问题: (1)14号的第14天,对手1~4号; (2)14号的第58天&a…

VS编译器字体颜色设置

默认颜色不好看,颜色之间代码各个关系之间没有很强关联性所以要设置字体颜色 颜色一步到位版本: 第一步: 第二步: 第三步:One dark Pro 第四步: 等待安装完后重启VS 点击Modify,一段时间结束后选…

IDEA 学习之 打开一个 MAVEN 工程

目录 1. 单体工程2. 多 module 工程3. 多个多 module 工程3.1. 重复 1 步骤3.2. 添加其他多 module 工程 1. 单体工程 2. 多 module 工程 3. 多个多 module 工程 3.1. 重复 1 步骤 3.2. 添加其他多 module 工程

django学习入门系列之第三点《CSS基础样式介绍2》

文章目录 文字对齐方式外边距内边距往期回顾 文字对齐方式 水平对齐方式 text-align: center;垂直对齐方式 /* 注意&#xff0c;这个只能是一行来居中 */ line-height:/*长度*/ ;样例 <!DOCTYPE html> <html lang"en"> <head><meta charset…

docker 环境部署

1.Redis部署 用docker拉取redis镜像 docker pull redis 用docker查看拉取的镜像版本号&#xff0c;这里查到的是 6.2.6 版本 docker inspect redis 通过wget指令下载对应版本的tar包&#xff0c;下载完成后解压 wget https://download.redis.io/releases/redis-6.2.6.tar.gz …

集合注意事项

目录 我们为什么要用到集合中的迭代器 List实现类的循环遍历 Set集合 HashSet TreeSet Map Hashmap Treemap Hashtable map的遍历方式 Collections的一些静态方法 我们为什么要用到集合中的迭代器 List实现类的循环遍历 如图我们对arraylist中加入了三个相同的“a”…

多路h265监控录放开发-(8)通过XCameraWIget类拖拽实现指定播放rtsp和窗口

首先修改xviewer的构造函数&#xff0c;把创建QWiget对象改为XCameraWiget对象&#xff0c;执行XCameraWiget类的构造函数 xcamera_widget.h #pragma once #include <QWidget> class XCameraWidget :public QWidget {Q_OBJECTpublic:XCameraWidget(QWidget* p nullptr)…

网络安全:Web 安全 面试题.(SQL注入)

网络安全&#xff1a;Web 安全 面试题.&#xff08;SQL注入&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系…

容器之事件盒

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>static void label_const(GtkWidget *eventbox) {static int i 0;static char citem[100];sprintf(citem, &quo…

【Unity学习笔记】第十八 基于物理引擎的日月地系统简单实现

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/139701843 作者&#xff1a;CSDN|Ringleader| 目录 目标数学理论资源准备数据准备代码实现Unity准备效果展示注意事项后记 目标 目标&#xff1a;利用Unity的物理引擎实现 “日地月三体系统” 。 效果…

PHP转Go系列 | ThinkPHP与Gin的使用姿势

大家好&#xff0c;我是码农先森。 安装 使用 composer 进行项目的创建。 composer create-project topthink/think thinkphp_demo使用 go mod 初始化项目。 go mod init gin_demo目录 thinkphp_demo 项目目录结构。 thinkphp_demo ├── LICENSE.txt ├── README.md …

【干货】微信小程序免费开源项目合集

前言 2024年了&#xff0c;还有小伙伴在问微信小程序要怎么开发&#xff0c;有什么好的推荐学习项目可以参考的。今天分享一个收集了一系列在微信小程序开发中有用的工具、库、插件和资源&#xff1a;awesome-github-wechat-weapp。 开源项目介绍 它提供了丰富的资源列表&…