Angularjs使用MVC的好处
1.从设计的层面来看:原来富客户端程序需要用javascript操纵dom结构中的细微元素,需要知道dom结构的细节,造成Controller和View的强耦合:实现JS逻辑时需要确切地知道dom结构的细节,而且如果dom结构改了,js也要改。用angularjs没有这个问题,它只是把数据丢给View,View自己来编排数据。
2.从代码的层面来看:
a.C和V: html代码和javascript代码可以完全分离,没有任何缠绕。Javascript代码里不会操纵dom元素,dom的html代码里也不需要注册javascript钩子
b.V和M: 数据不再由javascript函数填充到dom中,而是在dom中使用与html友好的模板标签,直接获得数据。
c.你将要写的Javascript代码看起来都是完整的controller对象,完全由数据+方法组成,非常易读、易维护;而且代码以“类”为单位,可以形成良好的代码组织结构。
用户输入事件的处理模式
1. M/V直接联动,并且自动化:原有的模式为dom输入元素上的用户输入事件指定监听函数,事件发生时运行监听函数,在函数里操纵dom输出元素;新模式是为dom输入元素直接绑定Model, 输入事件立即造成Model的修改,绑定这个Model的输出元素也直接跟着变。整个过程不需要开发者写一行Javascript代码,框架(容器)帮你在幕后做好相关的事情。
2.非输入型事件: 注册一个controller函数<img ng-src="{{img}}" ng-click="setImage(img)"> 。那angularjs是否包装了所有的JS事件模型?是比较全的,但对一些mobile事件还没有支持。
数据无关的原生JS操作如何支持
1.如何实现javascript的强交互效果,比如弹出框、tab等等? 答:可以在controller里的function直接调用alert()
2.Javascript现有的一些非domAPI,比如从请求中获得参数、读取cookie是否还支持? 答:支持的,都有相应的service可以注入
组件化能力
1. 可以用directive命令来生成标签
2. 多个组件可以放在同一张页面里用,而且不会生成iframe; 但是经研究,js、css文件重复、元素命名冲突问题并没有得到解决;如果两个组件都是<html>级的,则很容易出错