自定义UI 组件库的使用---局部全局注册

自定义 UI 组件库的使用—局部/全局注册

基本使用

任务目标: 把组件库从素材文件夹,复制到项目中使用。

核心步骤:

  1. 复制素材中的 XtxUI文件夹,放到 src/components 中。
  2. yarn lintnpm run lint 格式化文件。
  3. 使用组件库提供的组件。

新建测试页面:src\views\Test\index.vue

局部注册组件

<script setup lang="ts">
// 同一个 import 可以同时导入多个组件
import { XtxSkeleton, XtxButton } from "@/components/XtxUI/index";
</script>

<template>
<!-- 鼠标悬停检查 TS 类型 -->
<XtxButton type="primary" size="large">按钮</XtxButton>
<XtxSkeleton :height="30" :width="100" bg="pink" />
</template>

全局注册组件

核心步骤

  1. 新建文件components/XtxUI/index.ts
import type { App, Plugin } from 'vue'
import { XtxButton, XtxSkeleton } from './XtxUI'
const XtxUI: Plugin = {
  install(app: App) {
    app.component('XtxSkeleton', XtxSkeleton), app.component('XtxButton', XtxButton)
  }
}

export default XtxUI

  1. main.ts中全局注册
import XtxUI from "./components/XtxUI";

const app = createApp(App)
app.use(XtxUI)
  1. 在页面中使用
<script setup lang="ts">
</script>

<template>
+  <!-- 🐛问题:鼠标悬停为 any,失去 TS 类型检查 -->
  <XtxButton type="primary" size="large">按钮</XtxButton>
  <XtxSkeleton :height="30" :width="100" bg="pink" />
</template>
  • 🐛问题:全局组件注册成功,但是调用时没有 TS 类型提示。
  • 解决方案:为组件库创建对应的类型声明文件。

全局组件 TS 类型声明文件🚨

任务目标: 为全局组件书写对应的 TS 类型声明文件。

新建类型声明文件: src\components\XtxUI\global.d.ts ,准备基本结构

// 全局组件类型声明文件 for Volar
declare module 'vue' {
  // 全局组件需要定义 interface GlobalComponents
  export interface GlobalComponents { 
     全局组件名: 组件类型;
  }
}

export { }

添加全局组件类型声明:

// 导入 .vue 源文件
import Button from "./Button/index.vue";
import Skeleton from "./Skeleton/Skeleton.vue";

// 全局组件类型声明文件 for Volar
declare module "vue" {
  // 全局组件需要定义 interface GlobalComponents
  export interface GlobalComponents {
    // typeof 获取 TS 类型
   XtxButton: typeof Button;
   XtxSkeleton: typeof Skeleton;
  }
}

export {};
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wendyymei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值