《AngularJS深度剖析与最佳实践》一2.2 模块

简介:

本节书摘来自华章出版社《AngularJS深度剖析与最佳实践》一书中的第2章,第2.2节,作者 雪狼 破狼 彭洪伟,更多章节内容可以访问云栖社区“华章计算机”公众号查看

2.2 模块

与其他现代语言不同,当前版本的JavaScript(ECMAScript 5)并没有内置模块化语法。但是,随着程序规模越来越大,模块化的需求越来越重要,于是出现了require.js等第三方库,试图用库来弥补语言的不足。Angular并不依赖require.js等第三方库,而是自己实现了模块化系统,这个系统的核心就是模块(module)。
我们先来回顾一下“模块”的概念,然后自然就明白Angular中的module是怎么回事了。
所谓模块是指把相关的一组编程元素(如类、函数、变量等)组织到同一个发布包中。这些编程元素之间紧密协作,隐藏实现细节,只通过公开的接口与其他模块合作。
模块是一个粒度适中的复用单位,也是最常见的复用形式。比如我们常用的第三方库往往对外公开好几个类,使用者只要关注其公开接口就可以了,不用了解其实现细节,这种第三方库就是一个“模块”。
Angular的module也是如此。Angular中的编程元素包括Service、Directive、Filter、Controller等,它们只有通过模块进行“导出”才能供别人使用。如:angular.module('com.ngnice.app').service('ui', function() {...});语句的作用是:先取出一个名为com.ngnice.app的模块,然后把function() {...}作为一个回调函数以ui作为名字注册进去。这样,别人就可以随时通过ui这个名字把它从com.ngnice.app模块中取出来。
所以,我们可以简单地把模块看做一个注册表(registry),它保存着名字和编程元素的对照表,既可以存入,也可以取出。
一个程序往往不会只含有一个模块,这些模块需要互相协作,这就导致了模块之间具有依赖关系,比如有一个可复用模块,名叫common,而我们的应用想要使用其中名叫authHandler的service。那么我们就要先声明这种依赖关系:angular.module('com.ngnice.app', ['common']),这样,Angular就知道该去common模块中查找这个名叫authHandler的Service。如果没有声明这种依赖关系,那么就算引入了它所在的JavaScript文件,也照样是无法找到的,这是新手很容易踩坑的地方,请特别注意。同时,Angular还可以自动检测出循环依赖,以免出现无限递归。
注意,我们刚才调用了两次module函数:angular.module('com.ngnice.app')和angular.module('com.ngnice.app', ['common']),前者可不是后者的简写形式,而是具有完全不同的含义:前者的作用是引用一个模块,也就是说查找一个名叫app的模块,并返回其引用,如果模块不存在,则会触发一个异常[$injector:nomod] Module 'com.ngnice.app' is not available...;而后者的作用是创建一个模块,并且声明这个模块需要依赖一个名为common的模块,第二个参数是个数组,所以还可以声明依赖更多个模块。
模块依赖关系是一棵树,这就意味着:凡是依赖了app模块的更高级模块,也会自动依赖app所依赖的common等模块。

相关文章
|
存储 算法 大数据
大数据复合分区(Composite Partitioning)
【11月更文挑战第1天】
183 1
|
JavaScript 前端开发 UED
单文件组件(Single-File Components):Vue.js开发的模块化之道
Vue.js是一款流行的JavaScript框架,以其简洁、灵活和易用而广受欢迎。其中一个Vue.js的强大功能就是单文件组件(Single-File Components),它使得Vue.js应用的开发更加模块化和可维护。在本博客中,我们将深入探讨单文件组件的概念、结构、用法,以及如何利用它们来构建清晰、可复用和高效的Vue.js应用。
479 0
|
2天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
253 116
|
17天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
650 220
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
886 61
|
9天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1470 157