vue 如何更好的注册全局组件

vue 如何更好的注册全局组件

    • 通常做法
    • [install + use 批量注册](#install + use 批量注册)
    • [Vue3 注册全局组件](#Vue3 注册全局组件)
    • 参考

通常做法

把组件导出到 main.js,然后 Vue.component(id,component),一个个注册,缺点:效率不高

改进:把需要全局注册的组件放在数组中导出,然后 forEach 注册。

js 复制代码
import globalComponents from './components'
globalComponents.forEach(component => {
	Vue.component(component.name, component)
})

install + use 批量注册

在 components 的 index.js

js 复制代码
import ZmTable from './table'
const components = [ZmTable]
const allGlobalComponents = {
  install(Vue) {
    try {
      components.forEach(component => {
        if (!component.name) {
          // 跳出 forEach 的技巧
          throw new Error('组件必须提供名字,并且使用大驼峰式命名')
        } else {
          Vue.component(component.name, component)
        }
      })
    } catch (error) {
      console.error(error)
    }
  }
}

export default allGlobalComponents

main.js 中

js 复制代码
import allGlobalComponents from './components'
Vue.use(allGlobalComponents)

Vue3 注册全局组件

在 components 目录的 index.ts 编写注册函数

ts 复制代码
import Add from './Add.vue'
import HelloWorld from './HelloWorld.vue'

// 创建一个类型
import { createApp, defineComponent } from 'vue'
const app = createApp(defineComponent({}))
type App = typeof app //NOTE  声明一个类型

export const components = [Add, HelloWorld]
export const registerComponents = (app: App) => {
  components.forEach(component => {
    // @ts-ignore
    app.component(component.name, component)
  })
}

在 main.ts 中注册:

js 复制代码
import { components } from './components'
// NOTE 注册全局组件,必须在根组件挂载之前
components.forEach(component => {
  // @ts-ignore
  app.component(component.name, component)
})
app.mount('#app')

以插件形式注册:

components index.js

js 复制代码
import MyModel from './MyModel.vue'
const components = [MyModel]
export const registerComponents = app => {
  components.forEach(component => {
    app.component(component.name, component)
  })
}

main.js

js 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import { registerComponents } from './components'
const vue = createApp(App)
vue.use(registerComponents, app)
// registerComponents(vue) // 还可以这样

通过 install 注册组件:

js 复制代码
import MyModel from './MyModel.vue'
const components = [MyModel]
export const registerComponents = {
  install(app) {
    components.forEach(component => {
      app.component(component.name, component)
    })
  }
}

main.js:

js 复制代码
import { createApp } from 'vue'
import App from './App.vue'
import { registerComponents } from './components'
const vue = createApp(App)
vue.use(registerComponents, app)
// registerComponents(vue) //NOTE 不能这样注册

参考

vue官网 - 编写插件

相关推荐
@PHARAOH1 小时前
WHAT - GitLens vs Fork
前端
yqcoder2 小时前
前端性能优化:如何减少重绘与重排?
前端·性能优化
洋子2 小时前
Yank Note 系列 13 - 让 AI Agent 进入笔记工作流
前端·人工智能
wenzhangli75 小时前
Ooder A2UI 核心架构深度解析:WEB 拦截层的设计与实现
前端·架构
前端百草阁5 小时前
【前端性能优化全链路指南】从开发编写到构建运行的多维度实践
前端·性能优化
神探小白牙5 小时前
eCharts 多系列柱状图增加背景图
javascript·ecmascript·echarts
女生也可以敲代码5 小时前
AI时代下的50道前端开发面试题:从基础到大模型应用
前端·面试
ZhengEnCi5 小时前
M5-markconv自定义CSS样式指南 📝
前端·css·python
IT_陈寒6 小时前
SpringBoot自动配置的坑差点让我加班到天亮
前端·人工智能·后端
xingpanvip6 小时前
星盘接口开发文档:星相日历接口指南
android·开发语言·前端·css·php·lua