很久没有写过技术软文了,虽然 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 了,后来我也带过前端实习生,简单教了一下,也很快完成了需求。招人的难易程度不在于框架,因为基础扎实的前端本就难得。

黑盒梗

所有 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 大数据中心(部分项目)
  • 马蜂窝系统部

Angular 之我见的更多相关文章

  1. 【JavsScript】JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember

    摘要:选择JavaScript MVC框架很难.一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思.本文对JavaScript MVC框架Angular.Ba ...

  2. JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  3. 用angular来思考问题How do I “think in AngularJS” if I have a jQuery background?

    [翻译]How do I “think in AngularJS” if I have a jQuery background? 1. 不要先设计页面,然后再使用DOM操作来改变它的展现 在jQuer ...

  4. 阿里云 Angular 2 UI框架 NG-ZORRO介绍

    说明: Angular2出来后,一直想找个基于Angular2的前端后台管理框架,但一直没有找到比较适合的.前段时间在Angular官网资源无意之间看到NG-ZORRO,NG-ZORRO由阿里计算平台 ...

  5. JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember(转载)

    原文地址:http://sporto.github.io/.../comparison-angular-backbone-can-ember/ 原文作者:Sebastian Porto @Twitte ...

  6. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  7. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  8. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  9. angular实现统一的消息服务

    后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...

随机推荐

  1. Python代码规范性检测

    一定要注重代码规范,按照平时的代码管理,可以将Python代码规范检测分为两种: 静态本地检测:可以借助静态检查工具,比如:Flake8,Pylint等,调研了一下,用Flake8的相对较多,功能满足 ...

  2. Spring事务专题(三)事务的基本概念,Mysql事务处理原理

    前言 本专题大纲: 我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可 ...

  3. SpringBoot之Quartz实战

    说明:由于上篇文章我们已经讨论过springboot整合Quartz及相关配置,本次我们只说明Qrtz的增.删.改.启动.停止相关api的使用,其中涉及的其他技术,如:mybatisplus等技术以后 ...

  4. Gradle编译Spring源码

    使用工具:JDK1.8.0_11.Gradle4.9.idea2018.1.3 1. 配置Gradle Gradle下载地址:https://gradle.org/releases/ 在下载页找到自己 ...

  5. requests入门实践01_下载2560*1080的电脑壁纸

    新版本移步:https://www.cnblogs.com/zy7y/p/13376228.html 附上代码 # !usr/bin/env python # -*- coding:utf-8 -*- ...

  6. python IF while逻辑判断语句

    if判断语句 if 1==1 and 2==2: pass else: print('error') if 1==1 or 2==2: pass else: print('error') while循 ...

  7. Docker 搭建 Keycloak

    Docker 搭建 Keycloak 命令 需要创建好数据库,启动容器指定数据库信息 # KEYCLOAK_USER 用户名 # KEYCLOAK_PASSWORD 密码 # DB_ADDR 数据库地 ...

  8. Ubuntu用户都应该了解的快捷键

    无论我们使用什么操作系统还是什么软件,快捷键都是非常有用的,因为可以在启动应用程序或跳转到所需窗口,可以快速进行很多操作,而无需动鼠标到处点,节省时间和精力,提高效率. 就像在Windows中一样,U ...

  9. JS学习第五天

    循环语句: for(变量 in (容器名)数组名){ 执行的语句块: break: 结束整个循环; continue:结束本次循环, 进入下一次循环: } 双层for循环: 外层循环控制行,内层循环控 ...

  10. 文章要保存为TXT文件,其中的图片要怎么办?Python帮你解决

    前言 用 python 爬取你喜欢的 CSDN 的原创文章,保存为TXT文件,不仅查看不方便,而且还无法保存文章中的代码和图片. 今天教你制作成 PDF 慢慢看.万一作者的突然把号给删了,也会保存备份 ...