很久没有写过技术软文了,虽然 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. luogu P5826 【模板】子序列自动机 主席树 vector 二分

    LINK:子序列自动机 想了一些很有趣的做法. dp 容易看出 f[i][j]表示前i个数匹配了j个数的dp 不过复杂度很高. 贪心 容易想到匹配的时候每个数字尽量往前匹配 这样显然是最优的 复杂度Q ...

  2. 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(二)

    在上一篇文章<使用ProxySQL实现MySQL Group Replication的故障转移.读写分离(一) > 中,已经完成了MGR+ProxySQL集群的搭建,也测试了ProxySQ ...

  3. Kaggle-pandas(5)

    Data-types-and-missing-values 教程 Dtypes DataFrame或Series中列的数据类型称为dtype.您可以使用dtype属性来获取特定列的类型. 例如,我们可 ...

  4. 在图像中隐藏数据:用 Python 来实现图像隐写术

    什么是“隐写术”? 隐写术是将机密信息隐藏在更大的信息中,使别人无法知道隐藏信息的存在以及隐藏信息内容的过程.隐写术的目的是保证双方之间的机密交流.与隐藏机密信息内容的密码学不同,隐写术隐瞒了传达消息 ...

  5. 2020-07-20:你觉得redis有什么缺点,给你改进的话你会怎么改进?

    福哥答案2020-07-20: 1.由于 Redis 是内存数据库,短时间内大量增加数据,可能导致内存不够用.2.redis是单线程的,单台服务器无法充分利用多核服务器的CPU.3.遇到大量查询时容易 ...

  6. 2020-05-07:具体讲一下CMS流程

    福哥答案2020-05-07: 福哥口诀法:C初并重清(初始标记.并发标记.重新标记.并发清除) 整个过程分为 4 个步骤,包括:初始标记:仅仅只是标记一下 GCRoots 能直接关联到的对象,速度很 ...

  7. 2020-04-05:谈一下spring事务传播

  8. C#LeetCode刷题之#686-重复叠加字符串匹配(Repeated String Match)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3963 访问. 给定两个字符串 A 和 B, 寻找重复叠加字符串A ...

  9. Python多进程实现并行化随机森林

    文章目录 1. 前言 2. 随机森林原理 3.实现原理 3.1并行化训练 3.1.1训练函数 3.1.2 单进程训练函数 生成数据集模块--生成部分数据集 单进程训练函数代码 3.2 并行化预测 3. ...

  10. 搭建Elasticsearch Logstash Kibana 日志系统

    分布式系统下由于日志文件分布在不同的系统上,分析比较麻烦,通过搭建elk日志系统,可快速排查日志信息. Elasticsearch是大数据处理框架,使用的分布式存储,可存储海量数据:基于Lucense ...