对于angularJS的一点思考
已经找好工作近两周了,入职基本上还算顺利,自己两年来的挑灯夜战也算是有了收获,于是这两周基本上是按部就班的工作,没有学习什么新技术。在上个公司的时候,同事在项目中使用angularJs,之前他也没有接触过angularJs,一边学习一边做项目,结果给项目团队造成了很大的困扰。angularJS他研究的不透彻,在使用的过程中造成了很大的弊端,比如标签闪烁,暴露出未解析的源代码等。在商业的项目上尝试使用新技术是十分危险的,轻则项目留坑,给维护留下巨大的安全隐患,重则项目流产,商业计划因此而毁于一旦,公司也许就应为某些程序员的擅做主张而错失市场先机。
后来我为了给angularJS填坑,系统的学习了angularJS。看的是《用AngularJS开发下一代Web应用》。版本其实挺老的,书上的例子还是0.8的版本。现在已经更新到了3.0多了吧。没有去仔细的查看过最新的版本。刚入职,领导为了让我学习公司的框架,扔给我一个内部使用小项目,其实也不是特别小。只因为是内部使用的,而且是我一个人在做,所以在浏览器的兼容性和新技术的使用上面,就随意了许多。我可以和同事们协商使用最新的浏览器,因此能够避免很多新技术实践中遇到的问题。下面就简单的谈一谈我对AngularJS的一些理解,部分观点如果不正确,希望各位网友指正。
1、为什么会诞生AngularJS:
这个问题看起来荒唐,其实是十分重要的。任何一种技术都不会空穴来风,白白的产生出来。技术的产生一定是为了解决某个实践过程中遇到的问题。而通常大家所说的设计思想,则是解决此类问题的一个哲学原则。angularJS是为了解决前端工作代码混乱的一种工作状态。当初angularJS作者(Misko Hevery)为了开发一个Google Feedback项目,在项目中由于开发进度太慢,代码太多混乱。于是作者在以前造的小轮子的基础上重新设计了代码,用到了项目中,将混乱的js代码缩减到了1500行,改造后的轮子呗google重视,取名为angular。(关于具体详细的过程请移步:http://www.iteye.com/magazines/121。或者自己网上查找)。
angularJS解决了什么问题:
1、HTML和js代码混合在一起。
2、代码的复用率太低,一个网站有三四个表单,那么每个地方的表单验证要重写。
3、多人协作的困难。
4、后端和前端的解耦度更高。
angularJS把后端那套MVC设计模式(或者称之为代码组织方式)带到了前端,使得前端代码规范起来,管理起来也更加方便。在view层里面,看不到任何操作页面元素的代码。angularJS的view层的目的就是为了简单的呈现视图。至于用户和视图的交互过程则有controller来控制。虽然我是后端开发,但是也不可避免的经常会使用js写前端的一些逻辑。写前端逻辑的时候,经常需要写一会前端js然后写后端的接口。这样实际上增加了程序上下文切换的开销,使得编程的效率变得底下。使用angular以后。我编写前端的时候根本不关心后端的逻辑是怎么样的,我可以很方便的虚拟出一些假数据,仅仅依靠这些数据,我就能进行一些最基本的功能测试,完成前端绝大部分工作。
如果换过多人开发,这样的优势就更明显了。从前端用户需求出发,定义出所需要的数据格式以及规范。前后端同时开工。前端共有N个页面,可以抽象出多个Controller。分给多个人编写,抽象出其中公共的部分作为service继承使用。将页面中的公共的html元素抽象成directive可以在多个页面使用。(如分页栏)。后端程序员的工作则更加具体明确,减少了和前端同学的沟通,使得沟通成本下降了。
其中更为一点值得注意的是,angularJS将View 和数据层分离开的独特web构建方式,使得后端以前html与数据混合输出的方式得到了改善。一次编写代码可以在多个地方使用,因为后端仅仅定义了接口,无论在何种设备上呈现网页,只是view的样式放生了变化,其数据实质并没有发生变化。
2、view 和 data 分离。
这一部分,其实第一条已经写了一部分。这主要得益于angular的路由(routeProvider)机制。借助一些扩展(如html2js),可以将后端的静态资源完全的储存到客户端去。这样说有些朋友可能没有听明白,这里举一个小例子。比如我们以前去吃饭的时候,食堂的阿姨是将饭和菜打到盘子里递给我们的。每个同学吃饭,阿姨都要做两个动作,第一拿盘子,第二将饭菜盛到盘子里递给我们。但是后来人太多了,阿姨想了个办法。以后吃饭餐盘你们自己拿,我只负责打饭菜给你们。阿姨的工作只变成一个动作:将饭菜盛到盘子里递给我们。
不知道朋友们看懂我这个小故事没有。对应网页开发,我们的盘子就是我们的html,饭菜就是我们真正需要的数据。一个新闻页面用户每次刷新的时候,都会更换新的新闻。对于用户来讲,真正有意义的数据是那些更新的信息,而不是为了美化和包装这些数据的html。但是每次请求的时候这些东西还是返回给我们。第一个来说增加了网络数据传输量。第二个来说客户的响应速度可能会缓慢。
anguarlJS分别从服务端获取到这些js和打包成js的html静态资源。在页面初始化的时候,获取服务器端的数据,然后在客户端将用户需要的页面组装起来。
其实还有很多的优点,我只是一个初级的使用者,在以后的工作中,会有意的使用angularJS进行项目开发,充分的理解angularJS的前端设计思想。如果项目中不允许使用angularJS,那就要自己创建小项目学习了。
目前我写angularJS还存在挺多的问题,比如:
1、写代码总是写着写着,忍不住使用JQuery和js的方式写代码。使得一个页面中出现三种风格的代码,特别难以维护。
2、目前不会使用service。没有将公共的js代码封装成模块的习惯。这个在以后的代码中要有意加强。
3、在controller中使用Jquery操作DOM。这在angular中是不推荐甚至是不允许的。正确的做法应该是使用directive来编写可复用的指令。
4、写angularjs代码太少。熟悉一个项目需要大量的项目代码练手,我目前只能算是初步进入angularJS的大门。
希望各位angularJS的大神或者在github上有使用angularJS开发开源项目的能扔我一个链接,共同学习。
对angular的学习计划如下:
1、写2-3个使用angularJS框架的项目。使用到angularJS的大部分功能。
2、回归重温犀牛书和高程,重新系统的学习js。
3、学习angularJS源码。
五一假期转眼即过,明天就要上班了。所以今晚早点睡觉喽。
对于angularJS的一点思考的更多相关文章
- AngularJS』一点小小的理解
『AngularJS』一点小小的理解 AngularJS 是一个前端的以Javascript为主的MVC框架.与AngularJS相类似的还有EmberJS. 随着时代在进步,各种各样的开发理念与 ...
- 关于java异常的一点思考
关于异常的一点思考 异常生命周期 异常的来源 所有的异常都是抛出来的 有底层api抛出的 有自定义抛出的 异常的处理 1, 运行时异常 不做任何处理仍可编译通过 不建议捕获(不建议用异常来做流程控制, ...
- MSSQL显错注入爆数字型数据的一点思考
Title:MSSQL显错注入爆数字型数据的一点思考 --2011-02-22 15:23 MSSQL+ASP 最近在弄个站点,密码是纯数字的,convert(int,())转换出来不报错,也不知道其 ...
- 对dump脱壳的一点思考
对dump脱壳的一点思考 偶然翻了一下手机日历,原来今天是夏至啊,时间过的真快.ISCC的比赛已经持续了2个多月了,我也跟着比赛的那些题目学了2个月.......虽然过程很辛苦,但感觉还是很幸运的,能 ...
- 关于linux kernel slab内存管理的一点思考
linux kernel 内存管理是个很大的话题,这里记录一点个人关于slab模块的一点思考总结. 有些书把slab介绍成高速缓存,这会让人和cache,特别是cpu cache混淆,造成误解.sla ...
- 关于html页面元素语义化的一点思考
这几天在看招聘公告前端工程师的要求基本都附带了html语义化的要求,所以稍微关注了下这方面的知识.对于其中的一点就是要求页面元素在去除css样式之后还能有良好的布局引发了我一点思考.作为前端刚入门的我 ...
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...
- 基于CAS分析对ABA问题的一点思考
基于CAS分析对ABA问题的一点思考 什么是CAS? 背景 synchronized加锁消耗太大 volatile只保证可见性,不保证原子性 基础 用CPU提供的特殊指令,可以: 自动更新共享数据; ...
- 【翻译】全球用尽IPv4的一点思考
作者:Dimple 公众号:奔跑吧攻城狮 简介:专属于Java和Android开发,和你聊聊职场话题,一同展望未来 作为小小号主的我表示很无力啊,这几天,天天都是热点.前有网易员工勇敢发声维护自己的利 ...
随机推荐
- Warning: log write time 600ms, size 43KB
突然才发现一个数据库的LGWR进程的跟踪文件scm2_lgwr_5690.trc有大量的告警信息,如下所示: Warning: ;log write time 680ms, size 11569KB ...
- Linux SendMail发送邮件失败诊断案例(二)
Linux上Sendmail经常由于一些配置问题,导致邮件发送失败,下面整理.收集了一些邮件发送失败.异常的案例. 案例1:在新服务器上测试sendmail发送邮件时,发现邮件发送不成功,检查/var ...
- JSP分页显示实例(基于Bootstrap)
首先介绍一款简单利落的分页显示利器:bootstrap-paginator 效果截图: GitHub官方下载地址:https://github.com/lyonlai/bootstrap-pagina ...
- android 解决ListView点击与滑动事件冲突
如果你的ListView的Item有滑动功能,但又点击Item跳转到其它activity,这样若是在Adapter里面写点击事件是会导致滑动事件获取不到焦点而失效: 解决方法:不要在adapter里面 ...
- python paramiko 进行文件上传处理
#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko import uuid class Ha(object): def __ini ...
- netty4虚拟内存不断飙升
去年升级过一个老的netty3的程序到netty4,近期突然注意到一个问题,就是这个程序随着时间虚拟内存会不断升高.之前升级的时候担心存在内存泄露,所以还特意用jstate跟踪过gc回收的情况,并没有 ...
- Java基础知识笔记(四:多线程基础及生命周期)
一.多线程基础 编写线程程序主要是构造线程类.构造线程类的方式主要有两种,一种是通过构造类java.lang.Thread的子类,另一种是通过构造方法实现接口java.lang.Runnable的类. ...
- J2EE基础之EJB
J2EE基础之EJB 1.什么是EJB? EJB(Enterprise Java Beans),是JavaEE中的商业应用组件技术,是JavaEE三大组件(Servlet,JSP,EJB) ...
- Azure HDInsight 和 Spark 大数据实战(一)
What is HDInsight? Microsoft Azure HDInsight 是基于 Hortonoworks Data Platform (HDP) 的 Hadoop 集群,包括Stor ...
- ClearContainer 网络部分源码分析
// cc-oci-runtime/src/oci.c /*! * Create the state file, apply mounts and run hooks, but do not star ...