【组件库】element-plus组件库

news2024/12/23 18:13:57

文章目录

  • 0. 启动项目
  • 1. gc.sh 新增组件
  • 2. 本地验证(组件注册的方式)
  • 3. 官方文档修改
    • 3-1. 左侧菜单
    • 3-2 . 配置md文档
    • 3-3. 代码问题:
    • 文档修改
  • ----------------------------------------------
  • 4. 将naiveui的split 分割组件【 复制、迁移】到 element-ui-plus组件库
    • 4.1 naiveui的split 中 Split.tsx 代码解读
      • 4.1.1 Vue 3的 h 函数详解
      • 4.1.2 vue3中的defineComponent的作用
      • 4.1.3 vue3中的type PropType的作用 -- 进行类型的推断与验证
        • 定义【数组】的类型
        • 定义【对象】的类型
        • 定义【字符串】可传入内容
        • 可传入 字符串 或 数组
        • 其他汇总
      • 4.1.4 vue3中的as const 断言
      • 4.1.5 vue3中的ref
      • 4.1.6 vue3中的CSSProperties
      • 4.1.7 vue3中的watchEffect
      • 4.1.8 vue3中的setup() -- setup()函数
      • 4.1.9 给函数添加类型限制

0. 启动项目

安装pnpm

nvm list  #查看node版本
nvm use 18.13.0  #切换版本

npm install pnpm -g   #安装pnpm
pnpm -v   #查看pnpm版本,确认是否安装成功

问题:pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本
在这里插入图片描述

解决方法:

  1. 管理员身份运行 window powershell
  2. 执行:get-ExecutionPolicy,显示 Restricted,表示状态是禁止的;
  3. 执行:set-ExecutionPolicy,会提示输入参数:RemoteSigned
  4. 输入:Y

在这里插入图片描述在这里插入图片描述

运行项目

pnpm install   //安装依赖
pnpm run dev    // 跑本地运行 play\src\App.vue 的效果
pnpm run docs:dev   //跑md文档运行效果

在这里插入图片描述


1. gc.sh 新增组件

重要参考:

  1. element-plus 源码学习:配置组件模板
  • gc.sh 脚本,用于生成组件模板,组件模板将会简化开发步骤,同时使项目结构更加规范

按照 README.md 的介绍:

  1. 安装项目依赖: 下载element-plus后,执行 pnpm i 安装项目依赖
  2. 自动生成新组件:执行./scripts/gc.sh "headerSearch" 或者 pnpm gen headerSearch (这个命令其实执行了 scripts/gc.sh 脚本,使用内置的模板初始化了一个最简单的组件)生成新的组件。

执行./scripts/gc.sh "headerSearch" 后,会在 packages\components下自动生成 headerSearch 这个组件在这里插入图片描述

问题:程序“gc.sh”无法运行: 找不到应用程序所在位置 行:1 字符: 1 – 解决:这个指令需要再 git bash 里执行

  • 在window下执行sh文件需要使用bash终端,如果你已经安装了 Git 那么可以使用Git Bash Here, 在 vscode
    中可以使用如下图所示的方式打开bash终端:

在这里插入图片描述

  1. 导出新增的组件:在packages\components\index.ts 导出我们定义的组件headerSearch,这样才能被play/src/App.vue引用到
export * from './headerSearch'   //packages\components\index.ts 文件中这里导出的就是packages\components\headerSearch这个组件,也就是第2步生成的组件,因为import的路径是'./headerSearch'
  1. packages\element-plus\component.ts中导出组件,这样在install 安装element-plus时组件才能被安装上
import {
    BAffix } from '@element-plus/components/affix'
//..省略
import {
   
  BCheckbox,
  BCheckboxButton,
  BCheckboxGroup,
} from '@element-plus/components/checkbox'
//..省略
import {
    BHeaderSearch } from '@element-plus/components/headerSearch'   //1. 引入组件

import type {
    Plugin } from 'vue'

export default [  //2.对外暴露组件
  BAffix,
  //..省略
  BCheckbox,
  BCheckboxButton,
  BCheckboxGroup,
  //..省略
  BHeaderSearch
] as Plugin[]
  1. 本地调试:写好的组件可以通过启动pnpm run dev 进行调试

1、找到play/src/App.vue ,第一次没有这文件,需要执行pnpm run dev 后才自动生成这个文件

<template>
  <div class="play-container">
    <b-headerSearch></b-headerSearch>   
  </div> 
</template>

<script setup lang="ts"> 
import BHeaderSearch from '@element-plus/components/headerSearch'    //这里引入的组件
// import '@element-plus/theme-chalk/src/index.scss'
``` 2、引入新建组件,然后浏览器访问就可以了 3、没啥问题就可以提交代码了

注意
tsconfig.base.json文件中,有如下配置,猜想,项目中import 引入的时候 @element-plus/ == packages/

{
    
  "compilerOptions": {
    
    "outDir": "dist",
    //...省略
    "paths": {
    
      "@element-plus/*": ["packages/*"]    //根据这里猜想,项目中import 引入的时候 @element-plus/  ==  packages/
    }   
  } 
}  

2. 本地验证(组件注册的方式)

boe-ui-components-plus\play\src\App.vue 文件中引入组件后,执行npm run dev后在浏览器中查看本地跑组件效果

<template>
  <div class="play-container">
    9999999999999999999
    <b-divider />    
    <!-- 3.使用组件 -->
    8888888888
  </div>
</template>

<script setup lang="ts">
import BDivider from '@element-plus/components/divider'    //1.引入组件
import '@element-plus/theme-chalk/src/index.scss'    //2.引入样式
</script>

<style lang="scss">
html,
body {
   
  width: 100vw;
  height: 100vh;
  margin: 0;
  #play {
   
    height: 100%;
    width: 100%;
    .play-container {
   
      height: 100%;
      width: 100%;
      display: flex;
      align-items: center;
      justify-content: center;
    }
  }
}
</style>

在这里插入图片描述
在这里插入图片描述

3. 官方文档修改

3-1. 左侧菜单

修改docs\.vitepress\crowdin\en-US\pages\component.json(文件1) 每次pnpm run dev 都会删了原有的 docs\.vitepress\i18n\pages\component.json文件(文件2),再生成一个新的文件2 – 所以改这个文件1需要重新跑下dev

{
   
 "composite": {
   
    "text": "Composite",
    "children": [
      {
   
        "link": "/login-page",
        "text": "Login Page"
      },
      {
   
        "link": "/system-header",
        "text": "System Header"
      },
      {
   
        "link": "/search-table",
        "text": "HeaderSearchTable11"
      }
    ]
  },
}
  • 对象中的【text】 对应左侧菜单
    在这里插入图片描述
  • 【link】对应地址栏中的url

3-2 . 配置md文档

  • docs\en-US\component文件夹下新建文件search-table.md文件,注意这个md文件名必须和上面配置中的link的名字一样才行

页签标题
在这里插入图片描述
docs\en-US\component\search-table.md文档中的title 对应页签标题

3-3. 代码问题:

  1. 首先在.ts中声明并导出用到的props
import {
    buildProps,definePropType } from '@element-plus/utils'

import type {
    ExtractPropTypes } from 'vue'
import type SearchTable from './search-table.vue'

//定义数组里的对象
export interface tableDataItem {
   
    id: number,
    type: {
   
      value: number,
      label: string,
    },
    name: string,
    phone_main: string,
    tags: Array

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

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

相关文章

Science Advances 仿生双模态触觉感知

研究背景 触觉感知在人类收集信息和接收周围环境反馈中扮演着至关重要的角色。随着人工智能的发展&#xff0c;具有类似人类感知能力的智能机器人受到越来越多的关注。现有的触觉传感器能够感知接触前的刺激和压力大小&#xff0c;但它们在区分物体类型、评估柔软度和量化杨氏…

go-高效处理应用程序数据

一、背景 大型的应用程序为了后期的排障、运营等&#xff0c;会将一些请求、日志、性能指标等数据保存到存储系统中。为了满足这些需求&#xff0c;我们需要进行数据采集&#xff0c;将数据高效的传输到存储系统 二、问题 采集服务仅仅针对某个需求开发&#xff0c;需要修改…

Docker容器的生命周期

引言 Docker 容器作为一种轻量级虚拟化技术&#xff0c;在现代应用开发和部署中扮演着重要角色。理解容器的生命周期对于有效地管理和运维容器化应用至关重要。本文将深入探讨 Docker 容器的生命周期&#xff0c;从创建到销毁的各个阶段&#xff0c;帮助读者更好地掌握容器管理…

分手后如何走出夜晚的抑郁,告别失眠困扰?

在这个快速变化的世界里&#xff0c;分手成为了许多人生活中不得不面对的现实。而每当夜幕降临&#xff0c;那种难以言表的孤独感和深深的抑郁往往让人倍感煎熬&#xff0c;甚至陷入失眠的漩涡。那么&#xff0c;分手后我们该如何应对这种情绪困扰&#xff0c;重新找回自己的宁…

防火墙NAT和智能选路实验详解(华为)

目录 实验概述实验拓扑实验要求要求一要求二要求三要求四要求五 实验概述 从我上面一个博客能够了解到NAT和防火墙选路原理 ——>防火墙nat和智能选路&#xff0c;这一章我通过实验来详解防火墙关于nat和智能选路从而能熟练使用和配置防火墙&#xff0c;这里使用的是华为US…

lvs集群、NAT模式和DR模式、keepalive

目录 lvs集群概念 集群的类型&#xff1a;三种类型 系统可靠性指标 lvs集群中的术语 lvs的工作方式 NAT模式 lvs的工具 算法 实验 数据流向 步骤 一 、调度器配置&#xff08;test1 192.168.233.10&#xff09; 二、RS配置&#xff08;nginx1和nginx2&#xff09;…

Android:如何绘制View

点击查看Android 如何绘制视图官网 一、简介 Android 框架会在 Activity 获得焦点时请求 Activity 绘制其布局。Android 框架会处理绘制流程&#xff0c;但该 Activity 必须提供其布局层次结构的根节点。 Android 框架会绘制布局的根节点&#xff0c;并测量和绘制布局树。它会…

【每日一练】python类和对象现实举例详细讲解

""" 本节课程目的&#xff1a; 1.掌握类描述现实世界实物思想 2.掌握类和对象的关系 3.理解什么事面向对象 """ #比如设计一个闹钟&#xff0c;在这里就新建一个类 class Clock:idNone #闹钟的序列号&#xff0c;也就是类的属性priceNone #闹…

Redis学习笔记(个人向)

Redis学习笔记(个人向) 1. 概述 是一个高性能的 key-value 数据库&#xff1b;其具有以下三个特点&#xff1a; Redis支持数据的持久化&#xff0c;可以将内存中的数据保存在磁盘中&#xff0c;重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据&…

Nginx+Keepalive调度的高可用

nginxkeepalive: 调度器的高可用 vip地址主备之间的切换&#xff0c;主在工作时&#xff0c;p地址只在主上&#xff0c;主停止工作&#xff0c;p飘移到备服务器。 在主备的优先级不变的情况下&#xff0c;主恢复工作&#xff0c;vp会飘回到主服务器。 1、配优先级 2、配置…

EventBus学习

视频&#xff1a;05_尚硅谷_EventBus_粘性事件案例_哔哩哔哩_bilibili 1.整体框架 2.demo下载地址&#xff1a;https://github.com/greenrobot/EventBus 3.实现非粘性时间流程&#xff1a; 3.1导入架包eventbus-3.0.0.jar和eventbus-3.0.0-sources.jar 3.2在接受数据页面注…

k8s(五)---名称空间

五、名称空间 名称空间是k8s划分不同工作空间的逻辑单位,是k8s资源逻辑隔离的机&#xff0c;。可以给不同的租户&#xff0c;不同的环境、不同的项目创建对应的命名空间。 1、查看名称空间 kubectl get ns kubectl get namespaces 此处展示了四个命名空间 2、管理名称空间 1…

更新商品前端接口编写

文章目录 新增页面书写写表单价格符号的显示然后状态的书写后端枚举书写时间书写使用组件 新增页面书写 书写直接复制页面 写表单的绑定信息 然后绑定表单 表单绑定还有表单数据的绑定 标签中ref的作用就是将 该组件注册到vue对象的ref属性中 那么在vue运行的时候,会加载所…

IOC、DI<4> Unity、AOP、MVCAOP、UnityAOP 区别

IOC&#xff08;&#xff09;&#xff1a;控制反转&#xff0c;把程序上层对下层的依赖&#xff0c;转移到第三方的容器来装配 是程序设计的目标&#xff0c;实现方式包含了依赖注入和依赖查找&#xff08;.net里面只有依赖注入&#xff09; DI&#xff1a;依赖注入&#xff0c…

【网络文明】关注网络安全

在这个数字化时代&#xff0c;互联网已成为我们生活中不可或缺的一部分&#xff0c;它极大地便利了我们的学习、工作、娱乐乃至日常生活。然而&#xff0c;随着网络空间的日益扩大&#xff0c;网络安全问题也日益凸显&#xff0c;成为了一个不可忽视的全球性挑战。认识到网络安…

Gitee简易使用流程(后期优化)

目录 1.修改用户名 2.文件管理 新建文件/文件夹流程如下&#xff1a; 上传文件流程如下&#xff1a; 以主页界面为起点 1.修改用户名 点解右上角的头像--> 点击“账号设置” 点击左边栏里的“个人资料“ 直接修改用户名即可 2.文件管理 选择一个有修改权限仓库&#…

【轻松拿捏】Java-final关键字(面试)

目录 1. 定义和基本用法 回答要点&#xff1a; 示例回答&#xff1a; 2. final 变量 回答要点&#xff1a; 示例回答&#xff1a; 3. final 方法 回答要点&#xff1a; 示例回答&#xff1a; 4. final 类 回答要点&#xff1a; 示例回答&#xff1a; 5. final 关键…

yolov8预测

yoloV8 官方地址 预测 -Ultralytics YOLO 文档 1.图片预测 from ultralytics import YOLO #### 图片预测1 ### https://www.youtube.com/watch?vneBZ6huolkg ### https://github.com/ultralytics/ultralytics ### https://github.com/abdullahtarek/football_analysis…

Linux C语言基础 day10

目录 学习目标&#xff1a; 学习内容&#xff1a; 1.指针指向数组 1.1 指针与数组的关系 1.2 指针与一维数组关系实现 1.2.1 指针与一维数组的关系 1.2.2 指针指向一维整型数组作为函数参数传递 课外作业&#xff1a; 学习目标&#xff1a; 一周掌握 C基础知识 学习内…

专业条码二维码扫描设备和手机二维码扫描软件的区别?

条码二维码技术已广泛应用于我们的日常生活中&#xff0c;从超市结账到公交出行&#xff0c;再到各类活动的入场验证&#xff0c;条码二维码的便捷性不言而喻&#xff0c;而在条码二维码的扫描识别读取过程中&#xff0c;专业扫描读取设备和手机二维码扫描软件成为了两大主要工…