欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

论angular的“强大”之处  

程序员文章站 2022-06-05 23:27:41
...

最近看知乎,好有多讨论ng的,有观望准备学习的,也有使用中传播经验的。

 

我们公司算是大范围用(金融类核心系统,ng的业务相关的代码量在百万级别),ng的经验算是积累了些,写这篇blog发表下我的一些看法。

 

1. 如题目说angular是强大的,这里是有应用场景做背景的,双向绑定很多框架都能做,但

scope的设计 + 容器思想 + 双向绑定这些特性组合起来,更适合复杂的web开发场景:组件化,解耦。

 

2. angular官方介绍的首先提出的是增强的html语法,组件化技术也有很多,和服务端驱动相比,处理视图部分ng的理念应该是标记语言+ 声明式更适合UI,简单很重要。做一样的功能,抽象UI对象,用命令过程式编程驱动开发,比起html/css不够简单,灵活。(这方面很多流派,前端、后端的很多,这里是表达个人看法)

 

3. 扩展、灵活性很高,但方式约束性强

  a) 和第三方库的兼容使用上,虽然有个the angular way,但不妨碍和一些成熟的库结合,如地图、编辑器,图表

  b) compile link的api足够应付各种复杂、灵活的需求(动态的模板,动态的模型)

  c) the angular way还是约束很多的,这样也有利于大家保持一致的编码风格,这个对于大点的项目来说很重要

 

4. 强大可扩展的校验机制——围绕ngModelController/ngForm构建的绑定拦截和校验机制,真是太灵活了

 这些设计做业务系统把模型和校验分离得很清楚啊

$parsers/$formatters

$setViewVal

$errors/$invalid/$valid

$pristine/$dirty

 

当然也有吐槽的地方,比如:

1. ng-options生成的option没有title,要自己加指令做dom操作

2. ng-options性能差啊,我们重写了用html拼接实现的简化版,借鉴了dom重用思路

3. bootstrap不支持嵌套dom,我们都是先把模板放在body下的平级,隐藏,编译后,然后做dom操作形成父子结构

4. 为什么有上面一条,是因为angular不支持“热插拔”,bootstrap之前,必须所有的directive/controller/filter/service都到位的,但不是所有的应用都是SPA,一个应用的js/html的定义有延迟加载的情况

5. ng-repeat性能差啊,bindonce只能一定程度上缓解,很多时候我们用html字符串模板 + 事件代理方式处理,包装成双向绑定形式给开发者用

6. 有时候还需要用同步ajax的