草庐IT

Ng-Matero v15 正式发布

放荡不羁爱自由 2023-03-28 原文

前言

Angular 按照既定的发版计划在 11 月中旬发布了 v15 版本。推迟了一个月(几乎每个版本都是这个节奏?),Ng-Matero 也终于更新到了 v15。其实 Ng-Matero 本身的更新非常简单,但是同步维护的 Material Extensions 这个库要先于 Ng-Matero 发布,所以大部分精力都耗费在组件库上面了。

我已经很久没有写关于 Ng-Matero 的发版文章了。上次介绍发版还是 v10 版本,竟然已经是两年前的事情了。在这两年的开源生涯中,主要精力都在 Material 的扩展组件库上面。值得兴奋的是,就在 2022 即将过去时,Material Extensions 的周下载量终于破万了?,六月份时这个数据还只是 5k+。从 0 到 5k 用了两年,而从 5k 到 1w 只用了半年。

本文主要聊一下 Ng-Matero 升级 v15 时遇到的一些问题及感触。同时也简单说一下近期在 v14 中新增的几个功能。

GitHub: https://github.com/ng-matero/ng-matero

日期时间组件 Datetimepicker 的重磅更新

日期时间组件 datetimepicker 是在 v12 中添加的,同时也增加了 moment-adapter 日期模块。但是 datetimepicker 的时间选择模块并没有完全遵循 Material 规范(缺少时间输入模式),这也影响了很多需求的实现。在外国友人的帮助下,14.6.0 终于加上了时间输入功能,效果如下所示:

? 在线体验地址

时间输入功能默认是关闭的,需要添加 timeInput 参数启用该特性。

<mat-form-field>
  <input [mtxDatetimepicker]="datetimePicker" matInput>
  <mtx-datetimepicker #datetimePicker [timeInput]="true"></mtx-datetimepicker>
  <mtx-datetimepicker-toggle [for]="datetimePicker" matSuffix></mtx-datetimepicker-toggle>
</mat-form-field>

另外一个比较重要的更新是增加了 luxon-adapterdate-fns-adapter 两个日期模块,这算是和 Angular Material 对齐了,同样要感谢外国友人的帮助。具体使用方式可以参考这个 issue

侧边栏导航的焦点管理

侧边栏导航的聚焦功能是在 14.3.0 中添加的,可能很多人没有注意到这个不显眼的功能(使用 TAB 键即可快速的切换焦点,按 space 或者 enter 键可以展开收起二级菜单,按 enter 键可以跳转路由)。具体效果如下图所示:

? 在线体验地址

焦点管理属于 a11y 的范畴,使用 Angular Material 可以很轻松的完成 a11y 的需求,同时 Angular CDK 中也有 A11yModule 用于自定义焦点管理,总之非常方便。但是我并没有借助 CDK 来实现侧边栏导航的聚焦,只是使用了原生的 HTML 标签,具体方法不在此赘述,感兴趣的小伙伴可以留言咨询。

另外,侧边栏菜单按钮使用语义化标签进行了优化,关于按钮的选择可以参考 Angular Material 在 Button 文档中的说明:

Angular Material 使用原生的 <button><a> 元素,来保留默认的无障碍性体验。 当要执行某些动作时,应该使用 <button> 元素。 当用户要导航到其它视图时,应该使用 <a> 元素。

很多人可能觉得这个功能不重要,但是作为一个交互细节强迫症患者来说,真的无法忍受按 TAB 键时焦点乱飞且不知所踪的问题。题外话,我好奇的尝试了大部分高人气的 admin 后台(包括其它技术栈 React、Vue),发现 99% 的项目都没有处理 TAB 聚焦?。

基于 MDC 的 Angular Material 组件

我觉得 v15 最大的变化不是 Angular,而是 Angular Material。大部分组件都切换到了 MDC 风格,之前这些组件都是在 material-experimental 这个库中,现在转正了,而之前的组件都加上了 legacy- 前缀。

直接使用 ng update 升级的话,所有引用的组件都会自动改为 legacy 组件,所以并不会出现 break changes,但是 legacy 的组件都被标记为 deprecated(会显示中划线),看起来不舒服。update 完成之后可以再使用迁移工具将指定的组件升级到 MDC,还是挺方便的。详情参考官方文档 迁移到基于 MDC 的 Angular Material Components,里面详细介绍了组件的变化内容以及升级时的注意事项。

说一下自己的感受:

在第一次得知 Angular 官方将在 v15 全面迁移 MDC 时,内心还是很抵触的,主要是觉得 MDC 的很多效果做的不如 Angular Material 细腻(比如 form-field 的过渡动画)。但是在陆续升级完扩展组件库及 ng-matero 之后,发现 MDC 还是挺香的。很多样式得到优化,不需要自己再用 patch 方式修补(比如 icon 按钮的 hover 效果)。

影响最大的组件应该是 sliderchips,之前的写法都会报错,必须手动修复。再就是 card 组件,必须配合 mat-card-content 才会出现边距,如果用到的 card 组件很多,这块的工作量也挺大的。如果项目中有对 Material 样式的魔改,大部分的样式需要将 class 前缀 .mat- 替换成 .mat-mdc-

另外,form-field 组件移除了 legacy 样式,其实我最喜欢的还是这个风格。比较坑的是外层容器使用了 overflow: hidden 属性,影响到了 Material Extensions 中的 select 组件,暂时通过设置默认参数 appendTo="body" 临时修复,后面再考虑更好的方案。

停止更新的 Angular Flex-Layout

万万没想到 Angular Flex-Layout 竟然不再更新到 v15,虽然早就知道一直处于 beta 版本的 Flex-Layout 会在某个版本发生重大变化,但是等来的不是转正而是弃更?。Angular 官方还专门写了一篇文章来介绍这件事,建议使用 CSS 来替换 Flex-Layout。其实 Flex-Layout 和 CSS 并不能完全划等号,Flex-Layout 是一套指令集,GitHub 上面有下面一段介绍:

The real power of Flex Layout, however, is its responsive engine. The Responsive API enables developers to easily specify different layouts, sizing, visibilities for different viewport sizes and display devices.

Flex-Layout 的响应式 API 确实非常强大,它的栅格不受限制,你可以使用 %、px 等任意单位设置响应式布局。使用 CSS 很难做到这一点,一般的 CSS 都是 12 或者 24 列栅格,无法随意设置栅格的列数。而且想要实现一套基于 CSS 的响应式系统,编译出来的代码非常庞大,划分的列数越细,编译出来的体积就越大。而基于 JS 动态生成的响应式系统就不会有这种烦恼。如果项目中有自定义 DSL 的话,使用 Flex-Layout 编译栅格会更加简便。

说了这么多,其实 Flex-Layout 只是停止更新,v14 还是可以用的?,只是会提示依赖错误。不过 Ng-Matero 已经移除了 Flex-Layout,主要是示例项目中没有必须依赖 Flex-Layout 的地方。Ng-Matero 早就有一套和 Flex-Layout 断点相同的 grid class,只要将指令替换成 CSS class 就可以,使用方式和 Bootstrap 是一样的。

使用 Flex-Layout 实现响应式栅格:

<div fxLayout="row wrap" fxLayoutGap="16px grid">
  <div fxFlex="100" fxFlex.gt-xs="50" fxFlex.gt-sm="25" fxFlex.gt-md="20"></div>
</div>

使用 grid class 实现响应式栅格:

<div class="row">
  <div class="col-sm-6 col-md-3 col-xl-2"></div>
</div>

总结

这篇文章是本年度的第一篇文章,也是最后一篇,说来真是惭愧。Ng-Matero 从第一版发布至今已有三年半的时间,总共发布了 8 个大版本,但是很多功能依然没有时间和精力去完善。这几年持续维护了多个开源项目,感觉很疲惫,但是已经当成了生活的一部分,后面还会一直不忘初心的坚持下去,特别感谢所有朋友的支持与鼓励。

有关Ng-Matero v15 正式发布的更多相关文章

  1. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  2. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  3. ruby-on-rails - 获取 ActionController::RoutingError(当尝试使用 AngularJS 将数据发布到 Rails 服务器时,没有路由匹配 [OPTIONS] "/users" - 2

    尝试从我的AngularJS端将数据发布到Rails服务器时出现问题。服务器错误:ActionController::RoutingError(Noroutematches[OPTIONS]"/users"):actionpack(4.1.9)lib/action_dispatch/middleware/debug_exceptions.rb:21:in`call'actionpack(4.1.9)lib/action_dispatch/middleware/show_exceptions.rb:30:in`call'railties(4.1.9)lib/rails/rack/logg

  4. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  5. ruby - 如何在 Ruby 中从内存中 HTTP 发布流数据? - 2

    我想上传我在运行时用Ruby生成的数据,就像从block中提供上传数据一样。我找到的所有示例仅展示了如何流式传输必须在请求之前位于磁盘上的文件,但我不想缓冲该文件。除了滚动我自己的套接字连接之外,最好的解决方案是什么?这是一个伪代码示例:post_stream('127.0.0.1','/stream/')do|body|generate_xmldo|segment|body 最佳答案 有效的代码。require'thread'require'net/http'require'base64'require'openssl'class

  6. IDEA 2023.1 正式发布,新特性简介 - 2

     昨晚看到IDEA官推宣布IntelliJIDEA2023.1正式发布了。简单看了一下,发现这次的新版本包含了许多改进,进一步优化了用户体验,提高了便捷性。至于是否升级最新版本完全是个人意愿,如果觉得新版本没有让自己感兴趣的改进,完全就不用升级,影响不大。软件的版本迭代非常正常,正确看待即可,不持续改进就会慢慢被淘汰!根据官方介绍:IntelliJIDEA2023.1针对新的用户界面进行了大量重构,这些改进都是基于收到的宝贵反馈而实现的。官方还实施了性能增强措施,使得Maven导入更快,并且在打开项目时IDE功能更早地可用。由于后台提交检查,新版本提供了简化的提交流程。IntelliJIDEA

  7. Unity数据可视化图表插件XCharts3.0发布 - 2

    Unity数据可视化图表插件XCharts3.0发布历时8个多月,业余时间,断断续续,XCharts3.0总算发布了。如果要打个满意度,我给3.0版本来个80分。对于代码框架结构设计的调整改动,基本符合预期,甚是满意。相比之前的1.0和2.0版本,我认为3.0才是一个拿得出手给广大开发者使用的版本。1.0发布的时候,很兴奋,从0.1到1.0,也磨了一年,真的等不及想给大家试用了,还特地写过一篇文章以示庆祝。那个时候,1.0虽然还还不够完善,功能也不够丰富,但它是XCharts的开始,没有1.0,也就没有后面的2.0和3.0。后面的2.0发布,做了很多改进和优化,随着版本迭代,慢慢的发现有不少硬

  8. Python学习15:恺撒密码 B(python123) - 2

    描述恺撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪

  9. ruby-on-rails - 在 El Capitan 上安装 Rails 时出现 -lgmp 错误的库未找到(Mac OS 10.11.1 (15B42)) - 2

    在使用Rubyv2.2.2的ElCapitan(MacOSX10.11.1)上安装Rails时,出现以下错误:ERROR:Errorinstallingnokogiri:ERROR:Failedtobuildgemnativeextension./Users/jon/.rvm/rubies/ruby-2.2.2/bin/ruby-r./siteconf20151117-26799-ux15fd.rbextconf.rb--use-system-librariescheckingiftheCcompileraccepts...***extconf.rbfailed***Couldnotc

  10. ruby-on-rails - 在 Rails 中是否有比 Observers 更直接的方式来执行发布/订阅模式? - 2

    我有一个模型依赖于一个单独的、联合的模型。classMagazine图像是多态的,可以附加到许多对象(页面和文章),而不仅仅是杂志。杂志需要在相关图像发生任何变化时自行更新该杂志还保存了一张自己的截图,可用于宣传:classMagazine现在如果图像发生变化,杂志也需要更新其截图。所以杂志真的需要知道图片什么时候出了问题。所以我们可以天真地直接从封面图片触发屏幕截图更新classImage...但是图片不应该代表杂志做事然而,图片可以用于许多不同的对象,实际上不应该对杂志进行特定的操作,因为这不是图片的责任。该图像也可能附加到页面或文章,并且不需要为它们做各种事情。“正常”的rail

随机推荐