angularJS——模块
一、在讲angularjs的模块之前,我们先介绍一下angular的一些知识点:
AngularJS是纯客户端技术,完全用Javascript编写的。它使用的是网页开发的常规技术(HTML,CSS,Javascript),目的是让网页应用开发更快更容易。
AngularJS简化应用开发的一个重要方法是,将一些通用的低级开发操作包装起来提供给开发者。AngularJS会自动处理好这些低级操作。它们包括:
1.DOM操作
2.设置事件的监听
3.输入验证,因为AngularJS会处理大部分这些操作,所以开发者就能更多的专注在应用的业务逻辑上,更少地编写那些重复性的、易错的、低级的代码。
在AngularJS简化开发的同时,它也为客户端带来了一些精巧的技术,它们包括:
1.数据、业务逻辑、视图的分离
2.数据和视图的自动绑定
3.通用服务
4.依赖注入(主要用于聚合服务)
5.可扩展的HTML编译器(完全由JavaScript编写)
6.易于测试
7.客户端对这些技术的需求其实已经存在很久了。
同时,你还可以用AngularJS来开发单页或者多页的应用,不过其主要还是用来开发单页的。 AngularJS支持浏览器的历史操作,向前,向后按钮,单页应用中的收藏操作。
二、接下来,我们来详细讲解angularJS的模块。
大部分应用都有一个主方法用来实例化、组织、启动应用。AngularJS应用没有主方法,而是使用模块来声明应用应该如何启动。这种方式有以下几个优点:
1.启动过程是声明式的,所以更容易懂。
2.在单元测试是不需要加载全部模块的,因此这种方式有助于写单元测试。
3.可以在特定情况的测试中增加额外的模块,这些模块能更改配置,能帮助进行端对端的测试。
4.第三方代码可以打包成可重用的模块。
5.模块可以以任何先后或者并行的顺序加载(因为模块的执行本身是延迟的)。
举个例子:
1 <!doctype html> 2 <html ng-app="myApp"> 3 <head> 4 <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script> 5 <script> 6 var myAppModule = angular.module('myApp', []); 7 // configure the module. 8 // in this example we will create a greeting filter 9 myAppModule.filter('greet', function() { 10 return function(name) { 11 return 'Hello, ' + name + '!'; 12 }; 13 }); 14 </script> 15 </head> 16 <body> 17 <div>{{ 'World' | greet }}</div> 18 </body> 19 </html>
上面的例子,我们是通过在<html ng-app="myApp">中进行指定,来实现使用myApp这个模块启动应用的。
以上这个例子写法很简单,但是不适合用同样的写法来写大型应用。我们推荐是将你的应用拆分成以下几个模块:
1.一个服务模块,用来做服务的声明。
2.一个指令模块,用来做指令的声明。
3.一个过滤器模块,用来做过滤器声明。
4.一个依赖以上模块的应用级模块,它包含初始化代码。
举个例子:
1 <!doctype html> 2 <html ng-app="xmpl"> 3 <head> 4 <script src="http://code.angularjs.org/angular-1.0.2.min.js"></script> 5 <script src="script.js"></script> 6 </head> 7 <body> 8 <div ng-controller="XmplController"> 9 {{ greeting }}! 10 </div> 11 </body> 12 </html> 13 [/code] 14 15 script.js: 16 17 [code] 18 angular.module('xmpl.service', []). //服务模块 19 value('greeter', { //自定义greeter对象 20 salutation: 'Hello', 21 localize: function(localization) { 22 this.salutation = localization.salutation; 23 }, 24 greet: function(name) { 25 return this.salutation + ' ' + name + '!'; 26 } 27 }). 28 value('user', { //自定义user对象 29 load: function(name) { 30 this.name = name; 31 } 32 }); 33 angular.module('xmpl.directive', []); //指令模块 34 angular.module('xmpl.filter', []); //过滤器模块 35 angular.module('xmpl', ['xmpl.service', 'xmpl.directive', 'xmpl.filter']). //模块xmpl依赖于数组中的模块 36 run(function(greeter, user) { 37 // 初始化代码,应用启动时,会自动执行 38 greeter.localize({ 39 salutation: 'Bonjour' 40 }); 41 user.load('World'); 42 }) 43 // A Controller for your app 44 var XmplController = function($scope, greeter, user) { 45 $scope.greeting = greeter.greet(user.name); 46 }
这样拆分的原因是,在你的测试中常常需要忽略掉初始化代码,因为这些代码比较难测试。通过把它拆分出来就能在测试中方便地忽视掉它。通过只加载和当前测试相关的模块,也能使测试更专一。以上只是一个建议,你可以放心根据你的具体情况来调整。
一个模块就是一系列配置和代码块的集合,它们是在启动阶段就附加到应用上的。一个最简单的模块由两类代码块集合组成的:
配置代码块 —— 在注入提供者注入和配置阶段执行。只有注入提供者和常量可以被注入到配置块中。这是为了防止服务在被配置好之前就被提前初始化。
运行代码块 —— 在注入器被创建后执行,被用来启动应用的。只有实例和常量能被注入到运行块中。这是为了防止在运行后还出现对系统的配置。
代码实现:
1 angular.module('myModule', []). 2 config(function(injectables) { // provider-injector 配置代码块 3 // This is an example of config block. 4 // You can have as many of these as you want. 5 // You can only inject Providers (not instances) 6 // into the config blocks. 7 }). run(function(injectables) { // instance-injector 运行代码块 8 // This is an example of a run block. 9 // You can have as many of these as you want. 10 // You can only inject instances (not Providers) 11 // into the run blocks 12 });
模块还有一些配置的简便方法,使用它们的效果等同于使用代码块。举个例子:
1 angular.module('myModule', []). 2 value('a', 123). 3 factory('a', function() { return 123; }). 4 directive('directiveName', ...). 5 filter('filterName', ...); 6 // is same as 7 angular.module('myModule', []). 8 config(function($provide, $compileProvider, $filterProvider) { 9 $provide.value('a', 123) 10 $provide.factory('a', function() { return 123; }) 11 $compileProvider.directive('directiveName', ...). 12 $filterProvider.register('filterName', ...); 13 });
配置块会按照$provide, $compileProvider, $filterProvider,注册的顺序,依次被应用。唯一的例外是对常量的定义,它们应该始终放在配置块的开始处。
运行块是AngularJS中最像主方法的东西。一个运行块就是一段用来启动应用的代码。它在所有服务都被配置和所有的注入器都被创建后执行。运行块通常包含了一些难以测试的代码,所以它们应该写在单独的模块里,这样在单元测试时就可以忽略它们了。
模块可以把其他模块列为它的依赖。“依赖某个模块”意味着需要把这个被依赖的模块在本块模块之前被加载。换句话说被依赖模块的配置块会在本模块配置块前被执行。运行块也是一样。任何一个模块都只能被加载一次,即使它被多个模块依赖。
模块是一种用来管理$injector配置的方法,和脚本的加载没有关系。现在网上已有很多控制模块加载的库,它们可以和AngularJS配合使用。因为在加载期间模块不做任何事情,所以它们可以以任意顺序或者并行方式加载。
转载于:https://www.cnblogs.com/softwarefang/p/6169180.html
angularJS——模块相关推荐
- AngularJS学习之旅—AngularJS 模块(十五)
一.AngularJS 模块 模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. 1.创建模块 通过 AngularJS 的 angular ...
- AngularJS模块——module
angular.module('myApp',[]) 1.定义模块 2.第一个参数:定义的模块名: 3.第二个参数:依赖列表,也就是可以被注入到模块中的对象列表:依赖的这些模块需要在本模块加载之前由注 ...
- Angularjs之模块(angular.module('myApp', [])参数)
在AngularJS中,模块是定义应用的最主要方式.模块包含了主要的应用代码.一个应用可以包含多个模块,每一个模块都包含了定义具体功能的代码. 使用模块能给我们带来许多好处,比如: 保持全局命名空间的 ...
- AngularJS安装配置与基础概要整理(上)
以前整理的,可供参考. 安装: 1.首先要安装node.js和它的npm包管理系统.(nodejs相关待整理) 2.安装grunt .grunt是一个基于任务的Javascript工程命令行构建工具. ...
- 【开源】分享一个前后端分离方案-前端angularjs+requirejs+dhtmlx 后端asp.net webapi
一.前言 半年前左右折腾了一个前后端分离的架子,这几天才想起来翻出来分享给大家.关于前后端分离这个话题大家也谈了很久了,希望我这个实践能对大家有点点帮助,演示和源码都贴在后面. 二.技术架构 这两年a ...
- AngularJS基本知识点
AngularJS 是一个 MV* 框架,最适于开发客户端的单页面应用.它不是个功能库,而是用来开发动态网页的框架.它专注于扩展 HTML 的功能,提供动态数据绑定(data binding),而且它 ...
- 第二讲 html5框架+Crosswalk打包app 以及 Angularjs 基础(初步认识了解Angularjs)
第二讲 html5框架+Crosswalk打包app 以及 Angularjs 基 础(初步认识了解Angularjs) 学习要点: 1. html5框架+Crosswalk打包app 2. 什么是a ...
- 第二讲 html5 框架+Crosswalk 打包 app 以及 Angularjs 基础
第二讲 html5框架+Crosswalk 打包 app 以及 Angularjs 基础(初步认识了解 Angularjs) 学习要点: 1. html5 框架+Crosswalk 打包 a ...
- AngularJS ui-router (嵌套路由)
http://www.oschina.net/translate/angularjs-ui-router-nested-routes AngularJS ui-router (嵌套路由) 英文原文:A ...
最新文章
- 机器学习中的聚类算法(2):Mean Shift算法
- 用OpenCV搭建活体检测器
- fckeditor编辑器上传文件出现invalid Request问题解决
- docker虚拟机动态扩展内存
- linux上传下载文件
- c++ 树的先序、中序和后序的非递归实现(附完整源码)
- Java,Steam控制器和我
- 微信小程序之 3d轮播(swiper来实现)
- 关于QtCharts中的映射器与模型的使用
- 欢迎关注中文开源字体集 Open Source Fonts Collection for Chinese
- CIO如何计算信息化的投资回报率?
- Unity3D中UGUI的RectTransform对齐方式详解
- prism在java_Prism 框架应用-基础知识篇
- 【QT小记】设置窗口背景透明
- outlook如何同步服务器sent文件夹,.ost 文件的同步问题 - Exchange | Microsoft Docs
- EOS Wallet 操作
- UNR #1 火车管理
- 《机器人构建实战》——1.4 典型机器人
- Alpine镜像中时区的设置
- 奇偶校验,异或校验,和校验,nios串口校验
热门文章
- python 相交链表
- python 两数之和
- tensorflow对应的python版本_详解Tensorflow不同版本要求与CUDA及CUDNN版本对应关系
- Halcon知识:如何用mfc显示halcon读入图象
- html图片滚动红点_html2canvas生成的图片偏移问题
- python网页优化公司_使用python优化scipy.optimize.minimize公司
- 【Redis】详细基础命令 - 学习笔记
- 解决在IOS系统及微信中audio、video不能自动播放的问题
- Windows 用来定位 DLL 的搜索路径
- 用C++实现不能被继承的类