Angular 之我见
很久没有写过技术软文了,虽然 Angular 发布已有四年,得到了越来越多人的关注及认可,但是仍然有很多人不分青红皂白的进行诋毁。我打算结合自己的经历从客观的角度聊一聊我眼中的 Angular。
本人刚做前端接触的是 jQuery,对 MVVM 库和框架知之甚少,且身边没有独当一面的大牛引领,全靠视频教程和自己的摸索。后来做新项目也是选择了 Vue 技术栈,主要是自己菜,害怕 hold 不住其它框架。再后来无意中接触到 Angular,仿佛醍醐灌顶,完全被 Angular 文档吸引,感叹其双向绑定的设计巧思以及数据驱动的无穷魅力。
从我这几年使用框架的经验来看,前端框架的下限是一样的,也就是说如果没有统一的规范以及优秀的架构,所有框架都很容易写出难以维护的垃圾代码。即使是 Angular,同样也有这样的问题(大部分是不熟悉 Angular 造成的),但是 Angular 最大的优势是它的上限,只要参考官方风格指南的建议并且灵活运用依赖注入、响应式表单、拦截器等功能,系统维护及迭代都非常轻松。
从我自建的 Angular 学习交流群来看,现在想要学习 Angular 或者深入了解的朋友越来越多,但是仍然有很多人想尽各种理由为了黑而黑。本文简单总结了一些常用的黑梗并从自己熟悉的角度进行反驳,希望喜欢 Angular 的朋友不忘初心,不要受这些观点影响。
升级梗
AngularJS 到 Angular 的断崖式升级太坑了!
AngularJS 和 Angular 本来就是两个时代的框架,Angular 只是沿袭了 AngularJS 的设计理念,前端技术的飞速发展以及 Angular 超前的技术选型使得 1 到 2 的升级不可能是平滑的过度,而且 Angular 诞生的初衷就是摒弃 AngularJS 中陈旧的糟粕的技术实现。假如两者真的没有断崖式更新的话,那么 Angular 得到的吐槽和谩骂一定比现在更多。另外我想说一点,即使两个框架存在巨大的鸿沟,但是官方依然给出了升级方案,我觉得这已经非常良心了。我相信从 AngularJS 升级到 Angular 显然比换框架重构的代价低。
后端梗
Angular 不就是后端那一套嘛!
这个梗的影响力和杀伤力都称得上 NO.1,就连 Vue 作者在 Angular 刚发布时也甩了一个后端梗进行冷嘲热讽。
我是一名纯前端,后端只简单接触过 PHP,我并不清楚到底哪些才算是后端那一套。从最开始接触 Angular 到复杂系统的开发,我只知道装饰器、依赖注入这些写法很自然也很灵活,并没有因为这些概念承受太多的心智负担。另一方面,现在的招聘 JD 中一般都会加一项: 有后端经验者优先。可见现在的用人单位更加注重全面的综合素养,对于没有后端经验的前端开发者,使用 Angular 对于横向技术的拓展更为有利,所以秉承后端那一套绝对不是坏事。换个角度,我们再来看看如日中天的 TypeScript,它也不过是秉承后端思维的语言。如果有人因为后端思维而不接受 Angular 的话,那么 TypeScript 也同样应该被抵制,但事实是接受 TypeScript 的开发者越来越多,比如某某框架底层也改 TS 了。
招聘梗
Angular 招人太难了!
从我做面试官的角度来看,有 Angular 开发经验的候选人确实很少,如果单纯从框架使用的熟练度招人 Angular 确实吃亏。但是面试中涉及具体框架的问题已经越来越少,更多的还是宏观的基础知识,也就是说以同等条件招一个 vue 开发者也是一样的问题。我上一家公司的某部门就是 vue 技术栈,一个季度也没招到合适的候选人。
其实招聘难并不代表用人难,我们部门的后端实习生也就两天时间就能上手 Angular 了,后来我也带过前端实习生,简单教了一下,也很快完成了需求。招人的难易程度不在于框架,因为基础扎实的前端本就难得。
黑盒梗
Angular 把 Webpack 的相关配置都封死了不灵活。
很多人喜欢吐槽 Angular CLI 把 Webpack 配置写死了,相比其它框架提供 config 目录来说不灵活。关于 Angular CLI 可以拆分 Webpack 配置项就不说了,现在单纯讨论这种设计到底有没有好处。其实这也是一种开闭原则,将复杂常用的功能包装,然后通过外部参数项进行配置。这种设计方式根本就不新鲜,大部分插件也都是类似的实现原则。其中比较典型的插件比如大名鼎鼎的 ag-grid 和 fullcalendar,两个插件的功能都很复杂而且都没有暴露 DOM 结构,都是通过 JSON 数据进行自定义配置,有些功能因为没有完整的 DOM 结构确实操作起来会有些难受,但是好处就是轻便,使用简单。
从我这两年做项目的经历来看,使用 Angular CLI 的配置完全足够,并没有遇到必须独立配置项的情况。
生态梗
Angular 生态不行,组件库很少。
Angular 在 v5 之后生态已经逐步完善,组件库及插件的数量完全不逊色于其它框架,而质量上更是有过之而无不及。Angular 官方也亲自维护了一套 Material 组件库,质量之高无需多言。Google 内部还有一套 React 编写的 MDC 组件库,但是经过对比之后发现质量和 Angular Material 还是差一个档次。还有一个社区维护的基于 Angular 指令的 Flex Layout 布局神器,更是强大到没朋友。之所以强大,是因为它不仅实现了 Flex 布局,而且集成了 Grid 布局,这也是我知道的唯一一个 CSS Grid 框架。
总结
除了以上提到的常用黑梗之外,很有很多其它不常见的吐槽观点。欲加之罪,何患无辞? Angular 还有很多待解决的 issue,所以随便挑一个 issue 出来都可以吐槽一番。只盯着缺点看的人,满眼都是缺点。
就在写这篇文章的时候,又看到了一个观点清奇的黑梗,开始吐槽 Angular 的 decorator,言外之意应该是 Angular 是装饰器的重度用户,而装饰器还没有被标准化(这个标准看起来和 TS 的差距越来越大,而且 TS 的装饰器也只是实验特性),一旦装饰器被标准化,看你 Angular 怎么收场。黑的确实高明,不了解的人很容易被吓住,其实 Angular 的装饰器和 TS 并没有直接关系,只是一个语法糖,而且 Angular 也有自己的一套静态编译,即使标准的变化再大,Angular 都有足够的弹性应对,业务侧使用 ng update
也可以很容易地进行代码替换。
本文并不是想对比框架间的优劣,只是希望 Angular 可以被公正对待。如果不喜欢 Angular,也请不要恶意诋毁。
最近看到有朋友想找 Angular 相关的岗位,列举一下自己知道的公司及部门,欢迎大家纠正补充[偷笑]
- 若干外企(绝对香)
- 阿里云
- 华为云
- 灵雀云
- 海致 BDP
- Worktile
- 猿辅导
- 博客园
- 中信银行软开(部分系统)
- 360 大数据中心(部分项目)
- 马蜂窝系统部
- 竹云
- 中兴大数据
感谢您的阅读,如果您对我的文章感兴趣,可以关注我的博客,我是叙帝利,下篇文章再见!
开发低代码平台的必备拖拽库 https://github.com/ng-dnd/ng-dnd
低代码平台必备轻量级 GUI 库 https://github.com/acrodata/gui
适用于 Angular 的 CodeMirror 6 组件 https://github.com/acrodata/code-editor
基于 Angular Material 的中后台管理框架 https://github.com/ng-matero/ng-matero
Angular Material Extensions 扩展组件库 https://github.com/ng-matero/extensions
Unslider 轮播图插件纯 JS 实现 https://github.com/nzbin/unsliderjs
仿 Windows 照片查看器插件 https://github.com/nzbin/photoviewer
仿 Windows 照片查看器插件 jQuery 版 https://github.com/nzbin/magnify
完美替代 jQuery 的模块化 DOM 库 https://github.com/nzbin/domq
简化类名的轻量级 CSS 框架 https://github.com/nzbin/snack
与任意 UI 框架搭配使用的通用辅助类 https://github.com/nzbin/snack-helper
单元素纯 CSS 加载动画 https://github.com/nzbin/three-dots
有趣的 jQuery 卡片抽奖插件 https://github.com/nzbin/CardShow
悬疑科幻电影推荐 https://github.com/nzbin/movie-gallery
锻炼记忆力的小程序 https://github.com/nzbin/memory-stake