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 了,后来我也带过前端实习生,简单教了一下,也很快完成了需求。招人的难易程度不在于框架,因为基础扎实的前端本就难得。
黑盒梗
所有 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 之我见的更多相关文章
- 【JavsScript】JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
摘要:选择JavaScript MVC框架很难.一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思.本文对JavaScript MVC框架Angular.Ba ...
- JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 用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 ...
- 阿里云 Angular 2 UI框架 NG-ZORRO介绍
说明: Angular2出来后,一直想找个基于Angular2的前端后台管理框架,但一直没有找到比较适合的.前段时间在Angular官网资源无意之间看到NG-ZORRO,NG-ZORRO由阿里计算平台 ...
- JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember(转载)
原文地址:http://sporto.github.io/.../comparison-angular-backbone-can-ember/ 原文作者:Sebastian Porto @Twitte ...
- Angular杂谈系列1-如何在Angular2中使用jQuery及其插件
jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...
- Angular企业级开发(5)-项目框架搭建
1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...
- TypeScript: Angular 2 的秘密武器(译)
本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...
- angular实现统一的消息服务
后台API返回的消息怎么显示更优雅,怎么处理才更简洁?看看这个效果怎么样? 自定义指令和服务实现 自定义指令和服务实现消息自动显示在页面的顶部,3秒之后消失 1. 显示消息 这种显示消息的方式是不是有 ...
随机推荐
- luogu P6087 [JSOI2015]送礼物 二分 单调队列 决策单调性
LINK:送礼物 原本想了一个 \(nlog^2\)的做法 然后由于线段树常数过大 T到30. 以为这道题卡\(log^2\)没想到真的有神仙写\(log^2\)的过了 是我常数大了 抱歉. 能过的\ ...
- python7.2抛出自定义异常
pwd="123456"if len(pwd)<8: ex= Exception("密码不能低于8位数!")#自定义异常 raise ex #抛出自定义的 ...
- Linux下 flash工具的使用
使用命令前用cat /proc/mtd 查看一下mtdchar字符设备:或者用ls -l /dev/mtd* #cat /proc/mtd dev: size erasesize name ...
- Java实现邮箱验证码
前言 相比于java实现短信验证码,邮箱验证码就简单了许多,目前只是简单的利用java发送自定义内容至指定邮箱,等过几天再弄短信和邮箱验证码Web版本的.查询网上资料,得知相比于网易邮箱,QQ邮箱是最 ...
- java_String类、StringBuilder类、Arrays类、Math类的使用
String类 java.lang.String 类代表字符串.Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例 构造方法 java.lang.String :此类不需 ...
- 在 .NetCore 项目中使用 SkyWalkingAPM 踩坑排坑日记
SkyWalking 概述 SkyWalking 是观察性分析平台和应用性能管理系统.提供分布式追踪.服务网格遥测分析.度量聚合和可视化一体化解决方案.支持Java, .Net Core, PHP, ...
- NGINX+PHP+POSTGRESQL+ZABBIX 5.X
安装前准备工作 系统及应用版本 centos 8.3 nginx 1.18 php 7.4.8 postgresql 12.3 zabbix 5.0.2 安装编译环境依赖包 dnf -y instal ...
- java多线程(三):多线程单例模式,双重检查,volatile关键字
一.事先准备 首先准备一个运行用的代码: public class Singleton { public static void main(String[] args) { Thread[] thre ...
- java 的API及Object类
一 Java的API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就是JDK中提供给我们使用的类,这些类 ...
- C#LeetCode刷题-蓄水池抽样
蓄水池抽样篇 # 题名 刷题 通过率 难度 382 链表随机节点 47.0% 中等 398 随机数索引 41.6% 中等