iview 在今年 7 月 28 号发布了 3.0.0 版本,大版本升级每每意味着功能、接口的大变动。
虽然官网已经有长长的 更新日志,但看起来仍是有些抽象了,
因此我决定作个新旧版本的比较,盘点新版本到底为咱们带来了什么新特性。这是系列文章的第一篇,讲的是最简单的组件 —— Icon,但愿能给你们带来帮助html
新版本 Icon 有以下变化点:app
custom
属性传递类名custom-icon
属性传递类名有时间的朋友,也欢迎看看下面的详细解读:iview
新版 Icon 组件 最大的变化,是升级图标库 ionicons 到 3.x 版本,可用的图标类型从 730 增长至 866。奇怪的是,目前ionicons提供的版本已是 4.2.5 iview 却只用了其 3.x 版本。ionic
升级后的图标库,功能更强大了,但却为旧版本升级带来了一个坑:ide
具体是那些图标名称发生变化了呢?官网没有明说,ionicons也没有明说,找来找去也没找着可信的说明,建议你们在升级的时候仔细测试全部 Icon 调用。性能
除了ionicons库的变化以外,新版 Icon 还支持 经过 custom
传入图标 class 名,实现自定义图标功能,举个例子:测试
<Icon custom="fa fa-user" /> <!-- 等同于: --> <i class="ivu-icon fa fa-user">
这真是一个很方便的功能,由于 iview 提供的图标是不可能覆盖全部应用场景的,实际开发中通常都会自行引入其余图标库,在旧版本中引入的图标库与 iview 之间是割裂的,无法复用 icon 的行为逻辑,好比 Button
中图标的 loading 效果。
在新版本中终于能够大胆使用自定义图标了,好比 下面的例子,我在 Button
组件中使用 font-awesome 的 fa-user
图标,但在 loading 态中,仍是会保留原来的转菊花效果。ui
<div id="app"> <i-button custom-icon="fa fa-user">Custom icon</i-button> <i-button custom-icon="fa fa-user" :loading="true"> Loading effect </i-button> </div>
尴尬的是,目前仅有 Button
、Avatar
、Rate
三个组件支持 customIcon
属性,其余组件,诸如 Tab
、Input
、Alert
等尚不支持,官方也没有给出明确的计划,因此也很差揣测。this
新旧版本 Icon 组件代码差异不大,我将差别点抽出来:spa
<script> export default { props: { ... custom: { type: String, default: '' } }, computed: { classes () { return [ `${prefixCls}`, { [`${prefixCls}-${this.type}`]: this.type !== '', [`${this.custom}`]: this.custom !== '', } ]; } ... } }; </script>
能够看到,区别有两点,一是支持 custom
属性;二是基于 type
、custom
两个 props 计算 classes
值。Icon 组件很简单,这里只有一个小小建议: 对 type 值作个校验!
既然 type 属性只能传入 ionicons 支持的图标,为何不作个 in 校验呢?为了性能?新版的 ionicons 有 866 图标,确实可能会影响一丢丢性能,但实际上是能够在 process.env.NODE_ENV ==='development'
环境下作校验呀,多多少少也是能够挡住一些问题。