设为首页 加入收藏

TOP

初识AngularJS(一)
2014-11-23 23:19:37 来源: 作者: 【 】 浏览:22
Tags:初识 AngularJS

在使用了AngularJS重构团队内部的平台之后,一直想总结点什么,这里先说说学习和使用AngularJS的感受。AngularJS是一款开源的java script MV*(MVW、MVVM、MVC)框架,目前由Google维护。AngularJS弥补了HTML在构建应用方面的不足,其通过使用标识符(directives)结构,来扩展Web应用中的HTML词汇,使开发者可以使用HTML来声明动态内容,从而使得Web开发和测试工作变得更加容易。


AngularJS的创始人Misko是这样来描述框架诞生的历史的:AngularJS最初是作为一个编外项目(side project),当时我想去看看是否有可能让Web设计师(非开发者)只使用HTML标签来创建简单的应用程序。随着时间的推移,AngularJS演变成了一个全面的开发框架。AngularJS的设计理念是:构建UI应该是声明式的,这样的灵感来自于Misko在Adobe公司从事Flex方面工作的时候。


带你走近AngularJS系列


谈谈我个人使用的感受吧:最大的区别是对开发流程的影响,以往我想做一个Web应用,会先用纯Html构造原型,所有的数据均是假数据,静态的写到Html文件中,然后不断的调试CSS样式。待页面整体的展示让我满意之后,就开始Js与服务器的交互开发,并初步把页面的假数据替换掉,绑定成Js调用Ajax的返回。然而在使用到Table / List等数据加载的时候,我通常会在Js中来构造这些Dom元素。随着应用的庞大和复杂,我发现我在Js中构造了大量的Dom元素,下面是一个例子:


function buildPersonHtml(data){
var html = [];
data = data[0];
for(var id in data){
var count = 0;
if(data[id].length==0)
continue;
html[html.length] = '

';
html[html.length] = ' '+id+' 的任务列表:';
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
orderSubTask(data[id]);
for(var i=0; i var subtask = data[id][i];
if(subtask.progress != '100%')
count ++;
html[html.length] = '
';
if(subtask.status=='end')
html[html.length] = '';
else
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
html[html.length] = '';
}
html[html.length] = '
时间功能点详细情况完成进度耗时备注
开始: '+betterDate(subtask.createTime)+'
结束: '+betterDate(subtask.endTime)+'
开始: '+betterDate(subtask.createTime)+''+subtask.name+''+subtask.content.replace(new RegExp('\n','g'),'
')+'
'+subtask.progress+''+subtask.time+''+subtask.note+'
';
html[html.length] = ' 已完成任务:'+ (data[id].length-count)+
'    当前任务数:'+count+'
';
html[html.length] = '
';
}
return html.join('');
}


随着我构造这些Dom元素的Js代码越来越多,我的原型Html页面的内容也就越来越少,少到最后很可能就只有一个header一个footer和一个空的div而已,其他所有内容,都是Ajax从服务器读取,拿到Json对象的返回之后,才开始构建Dom加载。


接下来,在使用AngularJS重构的时候,我发现页面的原型设计好之后,基本上不需要做什么改变,即所有的Dom元素,页面上该看到的东西,都在你的Html中声明出来了。仅仅看Html文件,任何人都能知道这个页面大概有哪些元素(表单、表格等各种UI控件),然后AngularJS用ng-model的方式让你把这些Dom元素和数据进行了一种双向绑定,即把你的数据(Data Model)声明到页面中。(我觉得这一步完全有可能由Web设计师来完成)下面的代码片段是一个例子:
























主机名 IP地址 配置 账号OS 软件 备注 使用者 操作
{{machine.host}} {{machine.address}} {{machine.hardware}} {{machine.name}} / {{machine.password}} {{machine.os}} {{machine.env}} {{machine.note}}
{{machine.owner}}



维护中...
 
 
 
 


可以看到我把一个table与叫machines的data model做了一个双向绑定,而实际上machines就是一个Json数组而已,当你用Js从服务端取到数据,填充了叫machines的Json数组之后,这个table就会自动更新出来,每一行展示一个machine,每一个单元格展示machine上的某个属性。所谓的双向绑定,即一方产生变化的时候,另外一方就会同步更新。所以如果我在Js文件中操作改变了这个machines数组对象,例如删除了其中一个元素那么页面table就

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇NodeJS的模块原理 下一篇AngularJS和EmberJS计划支持Web C..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: