在讲angularjs的模块之前,我们先介绍一下angular的一些知识点:
AngularJS是纯客户端技术,完全用Javascript编写的。它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易。
AngularJS简化应用开发的一个重要方法是,将一个些通用的低级开发操作包装起来提供给开发者。AngularJS会自动处理好这些低级操作。它们包括:
DOM操作
设置事件的监听
输入验证,因为AngularJS会处理大部分这些操作,所以开发者就能更多的专注在应用的业务逻辑上,更少地编写那些重复性的、易错的、低级的代码。
在AngularJS简化开发的同时,它也为客户端带来了一些精巧的技术,它们包括:
数据、业务逻辑、视图的分离
数据和视图的自动绑定
通用服务
依赖注入(主要用于聚合服务)
可扩展的HTML编译器(完全由JavaScript编写)
易于测试
客户端对这些技术的需求其实已经存在很久了。
同时,你还可以用AngularJS来开发单页或者多页的应用,不过其主要还是用来开发单页的。 AngularJS支持浏览器的历史操作,向前,向后按钮,单页应用中的收藏操作。
接下来,我们来详细讲解angularJS的模块。
大部分应用都有一个主方法用来实例化、组织、启动应用。AngularJS应用没有主方法,而是使用模块来声明应用应该如何启动。这种方式有以下几个优点:
启动过程是声明式的,所以更容易懂。
在单元测试是不需要加载全部模块的,因此这种方式有助于写单元测试。
可以在特定情况的测试中增加额外的模块,这些模块能更改配置,能帮助进行端对端的测试。
第三方代码可以打包成可重用的模块。
模块可以以任何先后或者并行的顺序加载(因为模块的执行本身是延迟的)。
举个例子:
<!doctype html> <html ng-app="myApp"> <head> <script src="https://code.angularjs.org/angular-1.0.2.min.js"></script> <script> var myAppModule = angular.module('myApp', []); // configure the module. // in this example we will create a greeting filter myAppModule.filter('greet', function() { return function(name) { return 'Hello, ' + name + '!'; }; }); </script> </head> <body> <div> {{ 'World' | greet }} </div> </body> </html>
上面的例子,我们是通过在<html ng-app="myApp">中进行指定,来实现使用myApp这个模块启动应用的。
以上这个例子写法很简单,但是不适合用同样的写法来写大型应用。我们推荐是将你的应用拆分成以下几个模块:
一个服务模块,用来做服务的声明。
一个指令模块,用来做指令的声明。
一个过滤器模块,用来做过滤器声明。
一个依赖以上模块的应用级模块,它包含初始化代码。
举个例子:
<!doctype html> <html ng-app="xmpl"> <head> <script src="https://code.angularjs.org/angular-1.0.2.min.js"></script> <script src="https://www.linuxidc.com/script.js"></script> </head> <body> <div ng-controller="XmplController"> {{ greeting }}! </div> </body> </html>
script.js:
angular.module('xmpl.service', []). //服务模块 value('greeter', { //自定义greeter对象 salutation: 'Hello', localize: function(localization) { this.salutation = localization.salutation; }, greet: function(name) { return this.salutation + ' ' + name + '!'; } }). value('user', { //自定义user对象 load: function(name) { this.name = name; } }); angular.module('xmpl.directive', []); //指令模块 angular.module('xmpl.filter', []); //过滤器模块 angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']). //模块xmpl依赖于数组中的模块 run(function(greeter, user) { // 初始化代码,应用启动时,会自动执行 greeter.localize({ salutation: 'Bonjour' }); user.load('World'); }) // A Controller for your app var XmplController = function($scope, greeter, user) { $scope.greeting = greeter.greet(user.name); }