对于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开发,和你聊聊职场话题,一同展望未来 作为小小号主的我表示很无力啊,这几天,天天都是热点.前有网易员工勇敢发声维护自己的利 ...
随机推荐
- Nagios学习实践系列——基本安装篇
开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...
- 小结-stm32 驱动LED灯
使用位带操作,位带操作就是把每个比特膨胀成一个32位的字,当访问这些字的时候就访问这些比特位. http://www.cnblogs.com/xiaobo-Linux/ 然后,端口使能: //³õʼ ...
- [WPF系列]-Data Validation
项目经常前台界面涉及到用户输入时,我们常常会用到数据有效性的验证.在网页中我们之前用js来校验Form中的数据有效性.在WPF中我们如何实现这种验证机制了?答案:INotifyDataErrorInf ...
- 用最简单的方式在C#中使用多线程加速耗时的图像处理算法的执行(多核机器)。
图像处理中,有很多算法由于其内在的复杂性是天然的耗时大户,加之图像本身蕴涵的数据量比一般的对象就大,因此,针对这类算法,执行速度的提在很大程度上依赖于硬件的性能,现在流行的CPU都是至少2核的,稍微好 ...
- CANopen学习——OSI模型复习
CanOpen协议实现了物理层和数据链路层,OSI模型是完整的7层. OSI模型网络七层包括物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 物理层:提供信息传输的物理连接通道,包括使用的 ...
- 基于Azure构建PredictionIO和Spark的推荐引擎服务
基于Azure构建PredictionIO和Spark的推荐引擎服务 1. 在Azure构建Ubuntu 16.04虚拟机 假设前提条件您已有 Azure 帐号,登陆 Azure https://po ...
- 2016.10.30 NOIP模拟赛 day2 AM 整理
题目+数据:链接:http://pan.baidu.com/s/1gfBg4h1 密码:ho7o 总共得了:130分, 1:100分 2:30分(只会这30分的暴力) 3:0(毫无思路) 虽然不高, ...
- Python+selenium自动化脚本编辑过程中遇到的问题和小技巧
应该也不算是问题和技巧,算是实践中学习到的Python,记录下,也不定时更新 1.通过截取url判断 实例: self.assertEqual(self.broswer.current_url[sel ...
- 2.一个EJB的小Demo
新建一个java普通项目即可 这里用到了Jboss,需要安装Jboss,然后进入jboss-4.2.3.GA\client目录,拷贝所有的jar包到本项目的lib下. 3个接口分别如下所示: publ ...
- Winform菜单和工具栏控件
1.ContextMenuStrip--右键菜单 可以绑定在任何一个控件上,添加操作快捷键,并可以设置多层 每行相当于一个按钮,输入-可添加分割线 2.MenuStrip--菜单 优先级最高,一定会出 ...