教你自己创建一个Vue的UI组件库类似Element

5 篇文章 0 订阅

**

网上看到了这篇文章 非常的棒哈

**

前言
随着前端的三大框架的出现,组件化的思想越来越流行,出现许多组件库.它能够帮助开发者节省时间提高效率,
如React的Ant-design,Vue的iView,Element等,它们的功能已经很完善了.
我写这遍文章的目的:记录自己搭建UI库的过程(对Vue的理解加深了好多)演示地址
首先讲一下思路:
平常写组件时,写一个组件要用时直接导入就行了,如你写了一个time.vue,用的时候

在这里插入图片描述

1.环境准备
前面说要把所有的组件放在一个文件夹里,最简单就是用脚手架搭一个项目目录结构,
同时还需要添加示例文档----方便调试和展示:
按钮的示例效果

在这里插入图片描述
1.目录结构
直接用vue-cli建立项目结构, 在基础上修改一下就行了(以满足我们示例的展示)
目录结构

├── build  -------------------------webpack相关配置文件
│   ├── build.js
│   ├── check-versions.js
│   ├── logo.png
│   ├── strip-tags.js
│   ├── utils.js
│   ├── vue-loader.conf.js
│   ├── webpack.base.conf.js -------配置markdown设置时会用到它
│   ├── webpack.dev.conf.js
│   └── webpack.prod.conf.js
├── config  ------------------------vue的基本配置
│   ├── dev.env.js
│   ├── index.js
│   └── prod.env.js
├── examples -----------------------放置例子
│   ├── App.vue --------------------根文件
│   ├── assets ---------------------静态资源
│   │   ├── css --------------------css
│   │   ├── img --------------------图片
│   │   └── logo.png ---------------vue的logo
│   ├── components -----------------公共组件
│   │   ├── demo-block.vue ---------盒子组件
│   │   ├── footer.vue -------------footer组件
│   │   ├── header.vue -------------header组件
│   │   └── side-nav.vue -----------侧边栏组件
│   ├── docs -----------------------例子模块的文档
│   │   ├── breadcrumb.md ----------面包屑组件文档
│   │   ├── button.md --------------按钮组件文档
│   │   ├── card.md ----------------卡片组件文档
│   │   ├── guide.md ---------------简介文档
│   │   ├── icon.md ----------------图标文档
│   │   ├── install.md -------------安装文档
│   │   ├── layout.md --------------布局文档
│   │   ├── logs.md ----------------更新日志文档
│   │   ├── message.md -------------消息文档
│   │   ├── start.md ---------------快速开始1文档
│   │   ├── tag.md -----------------标签文档
│   │   └── twotable.md ------------二维表格文档
│   ├── icon.json ------------------图标数据
│   ├── main.js --------------------入口文件
│   ├── nav.config.json ------------侧边栏数据
│   └── router ---------------------路由
│       └── index.js ---------------路由配置
├── packages -----------------------组件库源代码
│   ├── README.md ------------------README
│   ├── breadcrumb -----------------面包屑源码
│   │   ├── index.js
│   │   └── src
│   ├── breadcrumb-item ------------面包屑源码
│   │   └── index.js
│   ├── button ---------------------按钮源码
│   │   ├── index.js
│   │   └── src
│   ├── card -----------------------卡片源码
│   │   ├── index.js
│   │   └── src
│   ├── col ------------------------列布局源码
│   │   ├── index.js
│   │   └── src
│   ├── message --------------------消息源码
│   │   ├── index.js
│   │   └── src
│   ├── two-dimensional-table -----二维表格源码
│   │    ├── index.js
│   │    └── src
│   ├── row -----------------------行源码
│   │   ├── index.js
│   │   └── src
│   ├── tag -----------------------标签源码
│   │   ├── index.js
│   │   └── src
│   ├── theme-default --------------样式表
│   │   └── lib
│   ├── package.json
│   └── index.js -------------------组件库入口
├── index.html ---------------------主页
├── package.json
├── static
└── README.md

以上是已经修改过的目录结构,将脚手架生成的src目录改为examples用来放示例文档,所以相应的你要修改build目录下的webpack.base.conf.js ,让它指向examples,webpack才能正确进行打包
在这里插入图片描述
示例文档,编写文档使用markdown最适合了,要让vue能够实现markdown文档可以用vue-markdown-loader,配置相关文件在webpack.base.conf.js 的rules里添加
在这里插入图片描述
就可以开始写文档,测试一下
在这里插入图片描述
npm run dev 跑项目打开http://localhost:8080/#/hello, 可以显示,初步成功(基本实现)
接下来就要实现示例文档的效果: 既能演示又有代码展示(如下图)
在这里插入图片描述
如上图的示例文档是button.md , 要让它在button.md一个文件里想显示代码的地方显示代码,想显示按钮的地方显示按钮,所以就要在显示按钮的地方打上一个标识符,

让编译过程中能够识别,安装.vue的方式编译展示还是要用到markdown的配置,它其实封装了markdown-it,支持options选项,只要加上定义的标识符(我用的是’demo’),options 选项的配置(也在webpack.base.conf.js 里)
在这里插入图片描述
其实这就是把要当解析器遇到带demo的标识符时就会添加我们准备好的demo-block组件,按照以上规则解析成AST(抽象语法树),再把它编译成html
所以写示例文档时,可以这样写
在这里插入图片描述

2.如何编写组件源码

其实没有想象中那么难,就像平常写组件那样,只不过要按照一定结构编写(具体的可以去看我的github),一般的UI组件库都支持全局引入和单个组件引入,
全局引入:
在这里插入图片描述
遍历你写的组件,通过Vue.component注册到Vue上,构成一个install函数,暴露install,当你的别的项目要用时只要安装一下包,用Vue.use()使用(像别的插件一样)
单个文件引入:
在这里插入图片描述
类似的只要暴露出组件就OK了

别人要能够通过npm安装包用我们的包,我们是不是要在包里写所以组件和样式,别人只要npm安装包和引入一个全部组件的样式两步骤就可以使用了

3. npm发布你的UI框架

你要拥有一个npm账号(没有的直接去官网注册一个) 记得验证邮箱

打开终端登录npm
3.发布包
我们只有发布packages这个文件夹就行,写好packages文件夹下个的package.json
在这里插入图片描述

使用npm publish发布就OK了,别人就可以用npm install jk-ui --save愉快的玩耍了

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
好的,下面是实现模糊搜索的步骤: 1. 安装Element UI组件Vue项目中使用Element UI组件需要先安装它,可以使用npm或yarn命令进行安装。具体命令如下: 使用npm安装:`npm i element-ui -S` 使用yarn安装:`yarn add element-ui` 2. 引入Element UI组件Vue项目中需要使用Element UI组件,首先需要在main.js中引入Element UI组件。具体代码如下: ```javascript import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 实现模糊搜索功能 在Vue组件的template标签中添加一个el-input组件和el-table组件,其中el-input组件用于输入关键词进行搜索,el-table组件用于显示搜索结果。具体代码如下: ```html <template> <div> <!-- el-input组件 --> <el-input placeholder="请输入关键词" v-model="keyword" @input="handleSearch"></el-input> <!-- el-table组件 --> <el-table :data="tableData"> <el-table-column prop="name" label="姓名"></el-table-column> <el-table-column prop="age" label="年龄"></el-table-column> <el-table-column prop="gender" label="性别"></el-table-column> </el-table> </div> </template> ``` 在Vue组件的script标签中,定义data属性,其中包含tableData数组和keyword字符串。tableData数组用于存储搜索结果,keyword字符串用于存储搜索关键字。同时,在methods中定义handleSearch方法,该方法用于实现模糊搜索功能。具体代码如下: ```javascript <script> export default { data() { return { tableData: [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' }, ], keyword: '' } }, methods: { handleSearch() { if (!this.keyword) { // 如果keyword为空,显示所有数据 this.tableData = [ { name: '张三', age: 18, gender: '男' }, { name: '李四', age: 20, gender: '女' }, { name: '王五', age: 22, gender: '男' }, ] } else { // 使用filter方法实现模糊搜索 this.tableData = this.tableData.filter(item => item.name.includes(this.keyword)) } } } } </script> ``` 以上代码实现了一个简单的模糊搜索功能,当在el-input组件中输入关键词时,el-table组件会根据关键词进行模糊搜索,并显示搜索结果。如果关键词为空,el-table组件会显示所有数据。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值