论angular的“强大”之处
最近看知乎,好有多讨论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的
上一篇: redis 学习笔记1
下一篇: 后记