问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Element2组件源码剖析之Progress进度条

发布网友 发布时间:2024-10-03 17:02

我来回答

1个回答

热心网友 时间:2024-11-08 04:42

0x00简介

组件Progress用于展示操作进度,告知用户当前状态和预期。本文将深入分析源码,剖析其实现原理,耐心读完,相信会对您有所帮助。packages/progress/src/progress.vue?文件是组件源码实现。。?组件文档Progress??gitee源码?progress.vue?

更多组件剖析详见???Element2源码剖析组件总览。

0x01组件源码template模板内容

模板创建一个?<div>?元素根节点,class名为el-result,包含4个子节点自定义图标、自定义标题、自定义二级标题、自定义底部额外区域。

每个节点都提供了各自具名slot,在向具名插槽提供内容的时候需要指明slot#name,否则内容无法正确分发,将被丢弃(未提供匿名插槽)。

<template><divclass="el-result"><!--自定义图标sloticon--><divclass="el-result__icon"><slotname="icon"><component:is="iconElement":class="iconElement"/></slot></div><!--自定义标题slottitle--><divv-if="title||$slots.title"class="el-result__title"><slotname="title"><p>{{title}}</p></slot></div><!--自定义二级标题slotsubTitle--><divv-if="subTitle||$slots.subTitle"class="el-result__subtitle"><slotname="subTitle"><p>{{subTitle}}</p></slot></div><!--自定义底部额外区域slotextra--><divv-if="$slots.extra"class="el-result__extra"><slotname="extra"></slot></div></div></template>自定义图标

该节点是一个class名为el-result__icon的<div>?元素包,裹着名为icon的具名slot。

插槽提供了后备内容,动态引用svg图标组件。具体详见下文章节动态组件。

自定义标题

该节点是一个class名为el-result__title的<div>?元素包,裹着名为title的具名slot。

只有在title?是truthy或者向该插槽提供内容时,该节点才会被渲染。若两者都设置了(传入title值而且向该插槽提供内容),展示内容为插槽分发内容优先级较高。因为title是做为插槽的后备内容。

truthy(真值)指的是在布尔值上下文中,转换后的值为真的值。所有值都是真值,除非它们被定义为?假值(即除?false、0、""、null、undefined?和?NaN?以外皆为真值)

自定义二级标题

该节点是一个class名为el-result__subtitle的<div>?元素包,裹着名为title的具名subTitle。

只有在subTitle?是truthy或者向该插槽提供内容时,该节点才会被渲染。若两者都设置了(传入subTitle值而且向该插槽提供内容),展示内容为插槽分发内容优先级较高。因为subTitle是做为插槽的后备内容。

自定义底部额外区域

该节点是一个class名为el-result__extra的<div>?元素包,裹着名为extra的具名slot。只有向该插槽提供内容时v-if="$slots.extra",该节点才会被渲染。

动态组件

上文名为icon的具名slot的后备内容使用了动态组件,根据传入不同的图标类型icon,动态引入对应类型svg图标组件。

通过Vue的?<component>?元素加一个特殊的?is?attribute来实现在不同组件之间进行动态切换。

<component:is="iconElement":class="iconElement"/>

svg组件引入注册。

<script>importIconSuccessfrom'./icon-success.vue';importIconErrorfrom'./icon-error.vue';importIconWarningfrom'./icon-warning.vue';importIconInfofrom'./icon-info.vue';exportdefault{components:{[IconSuccess.name]:IconSuccess,[IconError.name]:IconError,[IconWarning.name]:IconWarning,[IconInfo.name]:IconInfo},};</script>计算属性

计算属性iconElement根据传入icon值动态生成图标名称。用于组件引用和class添加。

constIconMap={success:'icon-success',warning:'icon-warning',error:'icon-error',info:'icon-info'};exportdefault{//...computed:{iconElement(){consticon=this.icon;returnicon&&IconMap[icon]?IconMap[icon]:'icon-info';}}};

根据IconMap定义,若传入的icon值不是success/warning/info/error其中一个,返回默认值icon-info等同于icon值为info。

iconElement值范围为?icon-success,icon-warning,icon-error,icon-info。

svg样式

iconElement值?icon-success、icon-warning、icon-error、icon-info会用于svg图标颜色的自定义。不同类型的class定义了不同的颜色,效果如下:

attributes属性

组件定义了3个prop:title、subTitle、icon。

props:{title:{type:String,default:''},subTitle:{type:String,default:''},icon:{type:String,default:'info'}},title

设置标题内容,默认值为''。具体功能详见上文章节?自定义标题。

subTitle

设置二级标题内容,默认值为''。具体功能详见上文章节自定义二级标题。

icon

图标类型设置,用于引入指定类型的svg图标、设置图标颜色。具体功能详见上文章节计算属性。

0x03组件样式src/result.scss

组件样式源码packages\theme-chalk\src\result.scss使用混合指令b、e?嵌套生成组件样式。

//生成.el-result@includeb(result){//...//生成.el-result__iconsvg@includee(icon){svg{//...}}//生成.el-result__title@includee(title){//...//生成.el-result__titlepp{//...}}//生成.el-result__subtitle@includee(subtitle){//...//生成.el-result__subtitlepp{//...}}//生成.el-result__extra@includee(extra){//...}//生成.el-result.icon-success.icon-success{//...}//生成.el-result.icon-error.icon-error{//...}//生成.el-result.icon-info.icon-info{//...}//生成.el-result.icon-warning.icon-warning{//...}}lib/result.scss

前文可知使用gulpfile.js编译scss文件转换为CSS,经过浏览器兼容、格式压缩,最后生成packages\theme-chalk\lib\result.scss,内容格式如下。

.el-result{//...}.el-result__iconsvg{//...}.el-result__title{//...}.el-result__titlep{//...}.el-result__subtitle{//...}.el-result__subtitlep{//...}.el-result__extra{//...}.el-result.icon-success{//...}.el-result.icon-error{//...}.el-result.icon-info{//...}.el-result.icon-warning{//...}0x04?参考

"动态组件",vuejs.org\"viewBox""

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
弱弱的问一句R9 270X显卡怎么样~ 能带得起我的AMD 240CPU么?_百度知 ... i54570cpu华硕z87a主板要配多少的内存条和显卡 i5 3570k配R9 270X显卡,用什么主板和电源? 很容易上火是什么原因 口干舌燥五心烦热失眠多梦夜不能寐请问是什么原因,吃什么能有效... 想问看大家对老妻少夫的问题有何看法? ...战记第十三章第6关打法 山海战记13-6攻略-手游攻略-游戏鸟手游网 ...战记第十七章第1关打法 山海战记17-1攻略-手游攻略-游戏鸟手游网 ...山海战记9-6图文攻略-手游攻略-游戏鸟手游网 ...战记第十二章第2关打法 山海战记12-2攻略-手游攻略-游戏鸟手游网 做了怪梦,基本关键词是:找不到准考证、考试要迟到、出门打车各种阻碍重 ... 毛巾要多久换一次 毛巾多久更换一次最好? 迈睿科技微波感应模块的优缺点是什么? 怎样阻止别人给我发短信 成都迈睿科技有限公司怎么样? 自然吸气发动机可以改成涡轮增压吗 我双眼皮第二次修复,现在已经四个月了,还没自然,是不是手术没做好,感觉... 梦见与老头骂架,老头扔平果打我还要和我离婚我也骂了他他气的向要杀我... "毛蛤蜊"是什么? 魔芋胶囊功效与原理 魔芋膳食纤维服用魔芋膳食纤维的注意事项 ...的事情,想跨专业考教育类的研究生,目前应该怎样做 u30-h10 手机桌面壁纸怎么换 右手大拇指骨节处在厂里被机器压到粉碎性骨折,现在手内放有钢板,钢针固... 我因在厂里模具压到右手大拇指第二关节骨折,打了钢针,筋也断了,缝了... 交通事故大拇指骨折钢针固定,出院后那段时间属于治疗期还是恢复期,归交... 民法典中关于违约责任的规定有哪些 工伤大拇指骨折,打了8颗钢针,也是新进员工应该怎么去要求赔偿 ...因又手大拇指受伤骨折钢针固定,报工伤有没有生活费补 ...所以想把爸的号码过户给妈妈 请问怎么过户?狠麻烦吗?需要哪些_百度... 我想问,有没有人可以用支付宝借条给我用3000块。我用到9月8号。芝麻信... ...我芝麻信用分625 有花吧额度3000 没有借吧 是在校大学生 HarmonyOS(鸿蒙)——Image(图片)组件介绍 有没有支付宝借款的,支付宝打借条,一个月还,芝麻信用710分 ...借吗?支付宝打借条,因为刚刚发了身份证,芝麻信用641 ...抛到水里,好几个人下水找了好久,但是没有找到,这梦境什么意思?_百度... ...清澈见底的堰塘里,去救他的人们把水弄浑了没找着人是什么预兆?_百 ... 预防痔疮的有效方法有哪些 防止患上痔疮的最好方法是什么 生活中该怎么预防痔疮 天天吃巧克力会变聪明吗? 吃巧克力真的可以开发智力吗?天天吃好不好? 梦见去河边,看到有一只螃蟹大的蜘蛛,就去抓,要抓到了,它却咬了我,我... 艺术照应该怎么拍 春天回潮怎么处理 春季家里回潮怎么办 北京云蒙山风景区门票优惠政策2024 水质检测仪器有哪些 北京云蒙山景区预约平台 监测设备有哪些 华硕A8js7200笔记本如何安装隐装分区一键恢复vista ...SL预装系统是VISTA的 买了装了XP系统 要是想恢复VISTA怎么弄...