elementui源码学习之仿写一个el-bread
本篇文章记录仿写一个el-bread组件细节,从而有助于大家更好理解饿了么ui对应组件具体工作细节。本文是elementui源码学习仿写系列的又一篇文章,后续空闲了会不断更新并仿写其他组件。源码在github上,大家可以拉下来,npm start运行跑起来,结合注释有助于更好的理解。github仓库地址如下:什么是面包屑 直观来说,面包屑其实就相当于一个导航跳转的快捷操作方式。那么为什么这么叫呢?源自格林童话:
https://github.com/shuirongsh...
面包屑导航(BreadcrumbNavigation)这个概念来自童话故事“汉赛尔和格莱特”,当汉赛尔和格莱特穿过森林时,不小心迷路了,但是他们发现沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。所以,面包屑导航的作用是告诉访问者他们在网站中的位置以及如何返回。
源自百度百科:https://baike.baidu.com/item/...
组件需求分析 关于
bread
面包屑组件,主要是用于展示当前页面所在的层级位置,告知用户在哪里
,且能够点击面包屑做路由跳转(返回),我们分析一下面包屑组件的需求,大致有以下:- 面包屑分隔内容需求
- 默认分隔内容,比如饿了么UI的面包屑导航默认就是以 斜杠
/
分隔的 - 如果我们觉得默认分隔斜杠
/
不好看,也可自己传递分隔内容,比如以>>
分隔
- 默认分隔内容,比如饿了么UI的面包屑导航默认就是以 斜杠
- 跳转功能需求
- 比如push跳转,即:
this.$route.push(...)
- 或者replace跳转,即:
this.$route.replace(...)
- 比如push跳转,即:
provide和inject
provide、inject的知识点复习 一言以蔽之:祖先组件provide提供数据,后代组件(包含子组件)inject接收数据
关于
provide
和inject
我们可以这样的类比理解:- 父传子,是父组件使用
冒号:绑定传递
,子组件使用props接收数据
- 而祖先传后代,祖先使用
provide绑定传递
(提供),后代使用inject接收数据
(注入)
小案例
此案例是分为三个组件,分别是one组件、two组件、three组价,one组件是two组件的父组件、two组件是three组件的父组件。即关系为:one、two、three三个组件构成了爷、父、子这样关系的祖先组件和后代组件
one组件中有name和age两个字段的数据,需要提供到two组件和three组件中使用
案例代码图示分析
文章图片
案例效果图
文章图片
理解了这个小案例,再看下方的代码会更好明晰思路
为甚要提到
provide
和inject
呢?因为在封装面包屑组件的时候,官方是分为两个组件,el-breadcrumb
和el-breadcrumb-item
;在el-breadcrumb
组件中使用到了provide
提供默认分隔内容斜杠/
和分隔内容的图标class类名
给后代组件el-breadcrumb-item
使用。接下来我们看一下仿写封装的组件代码封装代码 封装的效果图
文章图片
使用组件的代码
类似官方的面包屑组件代码,这里我们也用两个面包屑组件代码,为:
my-bread
组件和my-bread-item
组件(祖先后代关系)默认颜文字分隔
外层
中层
内层
自定义分隔内容
外层
中层
内层
使用饿了么UI的图标做分隔
外层
中层
内层
可跳转
myTag跳转
myBadge跳转(replace)
当下
my-bread组件代码
.breadWrap {
font-size: 14px;
// 第一个面包屑的文字加粗
/deep/ .breadItem:first-child .breadItemWords {
font-weight: 700;
}
// 最后一个面包屑的小图标隐藏
/deep/ .breadItem:last-child .breadItemDivide {
display: none;
}
}
my-bread-item组件代码
{{ customDivide }}.breadItem {
display: inline-block;
.breadItemWords { font-weight: 400;
}
.isLink { font-weight: 700;
}
.isLink:hover { color: #409eff;
cursor: pointer;
}
.breadItemDivide { margin: 0 8px;
color: #999;
}
}
总结 【elementui源码学习之仿写一个el-bread】个人愚见
provide
和inject
主要使用的场景还是组件封装这一块,貌似在业务代码中使用的少推荐阅读
- [产品学习]做自己的产品经理
- #30天专注成长计划#|#30天专注成长计划# Day7行动学习
- 迷途的追逐
- 软希网源码资源下载|星宿UI V2.1 开源wordpress资源下载小程序源码,流量主激励视频广告
- 芯片|进阶研学大咖说04期 |包云岗《开源芯片的机遇与挑战》
- Android编程|我的Android 进阶修炼(1)( AOSP源码根目录结构)
- 安卓系统开发|搭建Android AOSP源码编译工作环境
- Android|ubuntu16.04 编译Android AOSP源码 android10
- Java自学-多线程|Java自学-多线程 原子访问
- 李希贵(希望学校没多少特色,但每一位学生都有自己的个性)