所有提交的电磁系统将被重定向到在线手稿提交系统。作者请直接提交文章在线手稿提交系统各自的杂志。< / div >< / div >< / div >

AngularJS:现代MVC框架在JavaScript

Nilesh耆那教徒的1,要不是曼加尔2和迪帕克·梅塔3
  1. MCA、讲师Mandsaur及技术李< / >
  2. CSE,讲师Mandsaur及技术李< / >
通讯作者:里,电子邮件:nilesh.jain@mitmandsaur.info
相关文章Pubmed,谷歌学者

访问更多的相关文章全球研究计算机科学杂志》上

文摘

AngularJS JavaScript是一个MVC框架由谷歌建立适当的体系结构和可维护的web应用程序。AngularJS的哲学是建立在声明代码比必要的代码,同时构建web应用程序的ui和连接不同的组件。在本文中,我们展示了AngularJS的特性。

介绍

AngularJS不是图书馆,而AngularJS是一个JavaScript框架,它包含HTML扩展到更多的表现力和可读的格式。它允许您用特殊装饰你的HTML标记,同步您的JavaScript让你编写应用程序逻辑,而不是手动更新视图。是否你想增强现有的JavaScript应用程序利用框架创建丰富的全功率和交互式SPA的角可以帮助您编写更清洁,更高效的代码。
这似乎是显而易见的,但重要的是要记住,许多(不是全部)框架是由业余爱好者在开源社区。虽然和激情伪造框架,像卡布其诺和淘汰赛,角是建立和维护由专用(天才)谷歌工程师。这不仅意味着你有一个大的开放社区学习,但是你也有熟练,可用性工程师负责帮助你得到角问题回答。
这不是谷歌第一次尝试一个JavaScript框架;他们首次开发全面的Web Toolkit,编译Java JavaScript, Google Wave团队广泛使用的。随着HTML5的兴起、CSS3和JavaScript,作为一个前端和后端语言,谷歌意识到网络不是完全用Java编写的。
为什么选择AngularJS ?
1。DOM有标记(角标记住在DOM)
2。数据是POJO(角使用普通JavaScript对象)
3所示。DI的模块(角严重利用依赖注入)
1。DOM有标记:
图像
模板在大多数客户端JavaScript框架的工作就像这样:
模板标记- >框架模板引擎- > - > HTML DOM
角,另一方面将直接标记到HTML文档和流程是这样的:
DOM HTML与角标记- > - >角模板引擎
角计算标记只有在HTML已经加载到DOM。
这种方法有三个主要的好处。
集成现有应用程序——因为只角开始评估页面的加载过程(即一旦HTML DOM),很容易洒少量的角“魔法”现有的应用程序。
2。简单——你可以使用基本的HTML文档中的角从你本地文件系统。在您的浏览器中打开HTML文档。不需要任何web服务器或模板构建过程。我发现这非常有用的用于创建一个新网站的快速原型或功能。
3所示。可扩展性——使用指令,角允许您创建自定义的元素和属性扩展标准HTML词汇。例如,在这张幻灯片my-custom-tag元素。使用角可以定义元素的呈现和分配行为。这允许您创建一个图书馆自己的可重用组件。

数据是POJO:

图像
角是唯一的主要前端框架,利用普通Javascript对象(pojo)为模型层。这使它非常容易与现有的数据源集成和玩基本数据。
假设你让一个AJAX调用从一个API得到一些数据。之前您可以将数据绑定到DOM,大多数框架需要包装的数据模型对象getter和setter。getter / setter是non-Angular框架是如何传播数据更改事件。
角被使用在这个过程被称为脏检查的快照数据随着时间的比较,看看什么发生了变化。虽然这种方法肯定存在一些缺点(美元范围。美元的应用,数据绑定限制等)
图像
有些人,爱的依赖注入,有些人讨厌它。如果你要使用角,你需要在前营。我爱它,因为它可以促进更好的模块化代码,使得强大的单元测试。
前端单元测试代码通常是很困难的,因为有很多粘依赖性。角的DI可以模拟出许多这些依赖项和隔离各个组件。

ANGULARJS的特点

功能1:双向数据绑定
觉得你的模型为您的应用程序的单一可信来源。你的模型,你去读或更新任何在您的应用程序。数据绑定可能是最酷的,AngularJS最有用的特性。它会节省你写大量的样板代码。一个典型的web应用程序可能含有高达80%的代码库,用于遍历,操纵,听DOM。数据绑定使这段代码消失,这样你就可以专注于您的应用程序。
觉得你的模型为您的应用程序的单一可信来源。你的模型,你去读或更新任何在您的应用程序。数据绑定指令提供应用程序视图的投影模型。这个投影是无缝的,没有发生任何努力。
传统上,当模型改变时,开发人员负责手动操纵DOM元素和属性,以反映这些变化。这是一条双行道。在一个方向上,模型变化驱动DOM元素的变化。另,DOM元素变化需要在模型中进行更改。这是进一步复杂化的用户交互,因为开发人员负责解释的交互,把它们融合成一个模型,并更新视图。这是一个非常手册和繁琐的过程,这就很难控制,随着应用程序的规模和复杂性。
必须有一个更好的方法!AngularJS的双向数据绑定处理DOM和模型之间的同步,反之亦然。
这是一个简单的例子,演示了如何将一个输入值绑定到一个< h1 >元素。
图像
这是非常简单的设置,几乎不可思议的…
功能2:模板
重要的是要认识到,在任何问题上都AngularJS操作模板作为字符串。这是所有的浏览器DOM。
在AngularJS,只是简单html模板。HTML词汇扩展,包含说明应该如何投射到模型视图。
HTML模板是由浏览器解析成DOM。DOM成为AngularJS编译器的输入。AngularJS遍历DOM模板呈现指令,这被称为指令。总的来说,指令负责设置应用程序视图的数据绑定。
重要的是要意识到,在任何问题上都AngularJS操作模板作为字符串。输入AngularJS浏览器DOM和不是一个HTML字符串。数据绑定是DOM转换,而不是字符串串连或innerHTML变化。使用DOM作为输入,而不是字符串,最大的区别是AngularJS已经从它的兄弟姐妹框架。使用DOM是允许您扩展指令的词汇和构建自己的指令,甚至抽象成可重用的组件!
这种方法最大的优点之一是,它会创建一个紧密的设计人员和开发人员之间的工作流程。设计师可以像他们一般会标注它们的HTML,然后开发人员把接力棒,钩的功能,通过绑定和很少的努力。
这里是一个例子,我使用ng-repeat指令数组遍历图像和填充什么本质上是一个img模板。
函数AlbumCtrl(美元范围){
范围。图像s = [
{“缩略图”:“img / image_01.png”,
“描述”:“01形象描述”},
{“缩略图”:“img / image_02.png”,
“描述”:“形象02描述”},
{“缩略图”:“img / image_03.png”,
“描述”:“形象03描述”},
{“缩略图”:“img / image_04.png”,
“描述”:“形象04描述”},
{“缩略图”:“img / image_05.png”,
“描述”:“形象05描述”}];
}
< div ng-controller = " AlbumCtrl " >
< ul >
<李ng-repeat = "图像在图像“>
< img ng-src = "{{形象。缩略图}}" alt = " {{image.description}} " >
李< / >
< / ul >
< / div >
它也值得一提,边注,AngularJS不强迫你学习新的语法或从您的应用程序中提取您的模板。
功能3:MVC
AngularJS包含原始MVC软件设计模式背后的基本原理到它如何构建客户端web应用程序。MVC或模型-视图-控制器模式意味着很多不同的事情不同的人。AngularJS没有实现MVC传统意义上的,而是更接近MVVM (Model-View-ViewModel)。
该模型
模型是应用程序中的数据。模型只是普通JavaScript对象。不需要继承框架类,包装代理对象,或使用特殊的getter / setter方法来访问它。事实上,我们正在处理香草JavaScript是一个非常好的特性,它减少了应用程序的样板。
ViewModel
视图模型是一个对象,提供具体的数据和方法保持特定的视图。viewmodel $对象的生活范围内AngularJS应用程序。美元只是一个简单的JavaScript对象范围小的API设计检测和广播更改其状态。
控制器
控制器负责设置初始状态和增加美元的范围与方法来控制行为。值得注意的是,控制器不存储状态,不与远程服务交互。
视图
AngularJS后存在的观点是HTML的HTML解析和编译和绑定包括呈现标记。这个部门架构应用程序创建一个坚实的基础。美元的范围有一个参考数据,控制器定义行为,和视图处理布局和交互转移相应控制器响应。
功能4:依赖注入
AngularJS有一个内置的依赖注入子系统,帮助开发人员通过使应用程序更容易开发,理解,和测试。依赖注入(DI)允许你要求你的依赖关系,而不必去寻找他们或者让他们自己。把它看作一种说“嘿我需要X ', DI负责创建和提供给你。进入核心AngularJS服务,它是一个简单的事,服务作为一个参数;AngularJS将检测您需要服务,并为您提供一个实例。
函数EditCtrl(范围、位置、美元routeParams美元){
/ /这里一些聪明的……
}
您也可以定义自己的自定义服务和使这些可供注射。
角。
模块(“MyServiceModule”, [])。
工厂(“通知”,“美元窗口”,函数(赢得){
返回函数(味精){
win.alert(味精);
};
}));
函数myController(范围、notifyService) {
范围。callNotify =函数(味精){
notifyService(味精);
};
}
myController。注入美元=(“美元范围”、“通知”);
特点五:指令
AngularJS的指令是我个人最喜欢的特性。你是否希望你的浏览器会做新把戏吗?好了,现在可以!这是我最喜欢的一个部分AngularJS。它也可能AngularJS最具挑战性的方面。指令可用于创建自定义的HTML标记,作为新的自定义小部件。他们还可以用于“装修”元素的行为和操作DOM属性以有趣的方式。
这里是一个简单的例子监听事件的指令和更新其美元的范围,因此。
myComponent myModule.directive(“添加”,
函数(mySharedService) {
返回{
限制:“E”、“
控制器:函数($,$ attrs mySharedService)
{
美元的范围。在美元(handleBroadcast,函数(){
美元的范围。消息= '指令:“+
mySharedService.message;
});
},
替换:没错,
模板:“输入> <”
};
});
然后,您可以使用这个自定义指令。
<组件ng-model = "消息" > < /组件>
创建您的应用程序组成的离散组件使它非常容易添加、更新或删除功能。

附加功能:测试

AngularJS团队感觉很强烈,任何JavaScript编写的代码需要有强大的测试集。他们设计了AngularJS记住可测试性,所以它使测试AngularJS应用程序尽可能简单。所以没有理由不这样做。鉴于JavaScript动态和解释,而不是编译,这是非常重要的对于开发人员编写测试采用一种严谨的思维方式。
AngularJS完全从头开始编写测试。它甚至还有一个端到端的和单元测试运行器设置。如果你希望看到在行动,去看看angular-seed项目https://github.com/angular/angular-seed。
一旦你的种子项目,这是小事一桩,运行测试。输出是什么样子:
图像
API文档的端到端的测试,做一个令人难以置信的工作说明的某一部分框架应该是如何工作的。一段时间后,我发现自己直接测试,看看一些工作,然后阅读剩下的文档弄出来的东西。
在社区的比较:
社区是最重要的一个因素需要考虑当选择一个框架。一个大型社区意味着回答更多的问题,更多的第三方模块,YouTube教程…你懂的。我有建立一个数据表,截至2014年8月16日。角绝对是赢家,GitHub第六most-starred项目有更多的问题比灰烬StackOverflow和骨干的总和,如你所见下图:
图像
然而,所有这些指标只是显示每个框架的当前状态。它也是有趣的框架有一个快速增长的声望。幸运的是,使用谷歌趋势(直到18/4/2015)我们可以得到一个答案:
图像

结论:

角的创新方法扩展HTML将很多意义的web开发人员的人的灵魂。一个大型社区和谷歌,留在这里和成长,它工作良好的快速原型项目和大规模的生产应用程序。

引用

  1. AngularJS与支柱。js和灰烬。js (https://www.airpair.com/js/javascript-framework-comparison)李< / >
  2. https://www.airpair.com/angularjs/posts/jquery-angularjs-comparison-migration-walkthrough李< / >
  3. http://code.tutsplus.com/tutorials/3 -原因-选择- angularjs - - -下一个项目净- 28457李< / >
全球技术峰会