对于angularJS的一点思考

已经找好工做近两周了,入职基本上还算顺利,本身两年来的挑灯夜战也算是有了收获,因而这两周基本上是循序渐进的工做,没有学习什么新技术。在上个公司的时候,同事在项目中使用angularJs,以前他也没有接触过angularJs,一边学习一边作项目,结果给项目团队形成了很大的困扰。angularJS他研究的不透彻,在使用的过程当中形成了很大的弊端,好比标签闪烁,暴露出未解析的源代码等。在商业的项目上尝试使用新技术是十分危险的,轻则项目留坑,给维护留下巨大的安全隐患,重则项目流产,商业计划所以而毁于一旦,公司也许就应为某些程序员的擅作主张而错失市场先机。html

后来我为了给angularJS填坑,系统的学习了angularJS。看的是《用AngularJS开发下一代Web应用》。版本其实挺老的,书上的例子仍是0.8的版本。如今已经更新到了3.0多了吧。没有去仔细的查看过最新的版本。刚入职,领导为了让我学习公司的框架,扔给我一个内部使用小项目,其实也不是特别小。只由于是内部使用的,并且是我一我的在作,因此在浏览器的兼容性和新技术的使用上面,就随意了许多。我能够和同事们协商使用最新的浏览器,所以可以避免不少新技术实践中遇到的问题。下面就简单的谈一谈我对AngularJS的一些理解,部分观点若是不正确,但愿各位网友指正。前端


 

一、为何会诞生AngularJS:git

这个问题看起来荒唐,实际上是十分重要的。任何一种技术都不会空穴来风,白白的产生出来。技术的产生必定是为了解决某个实践过程当中遇到的问题。而一般你们所说的设计思想,则是解决此类问题的一个哲学原则。angularJS是为了解决前端工做代码混乱的一种工做状态。当初angularJS做者(Misko Hevery)为了开发一个Google Feedback项目,在项目中因为开发进度太慢,代码太多混乱。因而做者在之前造的小轮子的基础上从新设计了代码,用到了项目中,将混乱的js代码缩减到了1500行,改造后的轮子呗google重视,取名为angular。(关于具体详细的过程请移步:http://www.iteye.com/magazines/121。或者本身网上查找)。程序员

      angularJS解决了什么问题:angularjs

一、HTML和js代码混合在一块儿。github

二、代码的复用率过低,一个网站有三四个表单,那么每一个地方的表单验证要重写。web

三、多人协做的困难。编程

四、后端和前端的解耦度更高。后端

angularJS把后端那套MVC设计模式(或者称之为代码组织方式)带到了前端,使得前端代码规范起来,管理起来也更加方便。在view层里面,看不到任何操做页面元素的代码。angularJS的view层的目的就是为了简单的呈现视图。至于用户和视图的交互过程则有controller来控制。虽然我是后端开发,可是也不可避免的常常会使用js写前端的一些逻辑。写前端逻辑的时候,常常须要写一会前端js而后写后端的接口。这样实际上增长了程序上下文切换的开销,使得编程的效率变得底下。使用angular之后。我编写前端的时候根本不关心后端的逻辑是怎么样的,我能够很方便的虚拟出一些假数据,仅仅依靠这些数据,我就能进行一些最基本的功能测试,完成前端绝大部分工做。设计模式

若是换过多人开发,这样的优点就更明显了。从前端用户需求出发,定义出所须要的数据格式以及规范。先后端同时开工。前端共有N个页面,能够抽象出多个Controller。分给多我的编写,抽象出其中公共的部分做为service继承使用。将页面中的公共的html元素抽象成directive能够在多个页面使用。(如分页栏)。后端程序员的工做则更加具体明确,减小了和前端同窗的沟通,使得沟通成本降低了。

其中更为一点值得注意的是,angularJS将View 和数据层分离开的独特web构建方式,使得后端之前html与数据混合输出的方式获得了改善。一次编写代码能够在多个地方使用,由于后端仅仅定义了接口,不管在何种设备上呈现网页,只是view的样式放生了变化,其数据实质并无发生变化。

 

二、view 和 data  分离。

这一部分,其实第一条已经写了一部分。这主要得益于angular的路由(routeProvider)机制。借助一些扩展(如html2js),能够将后端的静态资源彻底的储存到客户端去。这样说有些朋友可能没有听明白,这里举一个小例子。好比咱们之前去吃饭的时候,食堂的阿姨是将饭和菜打到盘子里递给咱们的。每一个同窗吃饭,阿姨都要作两个动做,第一拿盘子,第二将饭菜盛到盘子里递给咱们。可是后来人太多了,阿姨想了个办法。之后吃饭餐盘大家本身拿,我只负责打饭菜给大家。阿姨的工做只变成一个动做:将饭菜盛到盘子里递给咱们。

不知道朋友们看懂我这个小故事没有。对应网页开发,咱们的盘子就是咱们的html,饭菜就是咱们真正须要的数据。一个新闻页面用户每次刷新的时候,都会更换新的新闻。对于用户来说,真正有意义的数据是那些更新的信息,而不是为了美化和包装这些数据的html。可是每次请求的时候这些东西仍是返回给咱们。第一个来讲增长了网络数据传输量。第二个来讲客户的响应速度可能会缓慢。

anguarlJS分别从服务端获取到这些js和打包成js的html静态资源。在页面初始化的时候,获取服务器端的数据,而后在客户端将用户须要的页面组装起来。

 

其实还有不少的优势,我只是一个初级的使用者,在之后的工做中,会有意的使用angularJS进行项目开发,充分的理解angularJS的前端设计思想。若是项目中不容许使用angularJS,那就要本身建立小项目学习了。

目前我写angularJS还存在挺多的问题,好比:

一、写代码老是写着写着,忍不住使用JQuery和js的方式写代码。使得一个页面中出现三种风格的代码,特别难以维护。

二、目前不会使用service。没有将公共的js代码封装成模块的习惯。这个在之后的代码中要有意增强。

三、在controller中使用Jquery操做DOM。这在angular中是不推荐甚至是不容许的。正确的作法应该是使用directive来编写可复用的指令。

四、写angularjs代码太少。熟悉一个项目须要大量的项目代码练手,我目前只能算是初步进入angularJS的大门。

但愿各位angularJS的大神或者在github上有使用angularJS开发开源项目的能扔我一个连接,共同窗习。

对angular的学习计划以下:

一、写2-3个使用angularJS框架的项目。使用到angularJS的大部分功能。

二、回归重温犀牛书和高程,从新系统的学习js。

三、学习angularJS源码。


 

 

五一假期转眼即过,明天就要上班了。因此今晚早点睡觉喽。

相关文章
相关标签/搜索