传统的jQuery的前端项目虽然大大的简化了DOM操作,但仍然存在如下问题:
1.代码结构耦合性太高,模块化程度低;
2.缺乏依赖注入机制;
3.频繁的DOM操作,代码过于臃肿。
前端MVC框架的出现则很好的解决了jQuery项目带来的问题。当前前端MVC框架越来越火热,越来越多的公司开始放弃传统的jQuery,而转向MVC框架,如AngularJS,backbone等。在众多前端MVC框架中,谷歌出身的AngularJS算是佼佼者。
乐视云前端团队在年开始使用AngularJS来构建新项目。迄今为止已经成功的将云主机移植到了AngularJS版本上。下面讲述构建基于AngularJS的项目时遇到的问题和经验。
一云主机前端架构简介根据angular提供的控制器,过滤器,视图,等概念我们将前端结构划分如下。
Router用来实现页面的路由功能,是页面的分发入口。AngularJS可以使用Router替换页面中的局部显示。将公共的菜单,导航条与具体页面分离出来达到页面部分的复用。
Coludvm是云主机相关的具体代码。根据AngularJS的MVC结构,分为控制器和视图模板两部分,控制器是AngularJS程序的核心部分,所有的业务逻辑都应该放在这里,控制器绑定的数据则以模板的形式放在前端页面中,view和Template都是存放视图模板的地方,区别是view里存的是页面模板,Template里存放的是对话框模板。
Common是项目的公共模块,模块里三部分,filter,service,directive都是AngularJS提供的用于模块化开发的三个功能,filter是数据过滤器,可用于基本的数据显示格式化,直接在模板中使用,service是服务模块,提供了公共功能的封装,如HTTP请求,消息提示框,URL配置获取等。directive是AngularJS的一个特色,它一般封装了对DOM的一些操作,因为好的实践中不能在控制器中直接操作DOM,这些作用在DOM上的指令大大增强了普通DOM的功能,通过对DOM的操作封装了一些项目通用的控件。以上划分只能满足基本的功能开发,实际中经常需要引用第三方的插件,AngularJS满足了我们这方面的需求,AngularJS提供了相当丰富的插件库,使用简单,可以作为AngularJS的一个模块集成到AngularJS项目中。尽管AngularJS使用方便,架构清晰,但使用中还是遇到了各种问题。
二项目遇到的问题和采用的解决方案1控制器代码膨胀虽然开始阶段遵循了控制器里不要操作DOM这一铁则,但随着项目进展,代码愈发复杂,控制器也越来越臃肿。AngularJS的依赖机制很好的解决了这个问题,数据的格式化和数据过滤应全部放在filter中,和项目有关的数据映射应该提取出来,减少switch分支映射代码,做到源数据只有一份,衍生数据和格式全部脱离源数据。其中的一些配置数据则可以放在服务里,如在云主机项目中,Config服务模块存放了配置相关的信息,任何想使用它的地方只要引用Config依赖就可以了。总之写代码时要注意区分当前代码性质和归属。
2HTTP状态返回错误问题后台会返回三种状态:
(1)表示成功,需要把数据返回给controller;
(2)表示登录超时,需要刷新页面跳转到登录页面;
(3)表示后台错误,需要把错误信息提示给用户。
我们想要在全局的地方对这些逻辑进行了统一处理,但因为向后端的请求都是$