AngularJS 模块
模块包含了主要的应用代码。
一个应用可以包含多个模块,每一个模块都包含了定义具体功能的代码。
可以将module理解成一个容器,可以往其中放入controllers、services、filters、directives等应用的组成部分。

创建模块

<div ng-app="myApp">...</div>

<script>

var app = angular.module("myApp", []); 

</script>

AngularJS允许我们使用angular.module()方法来声明模块。
这个方法能够接受两个参数,第一个是模块的名称,第二个是依赖列表,也就是可以被注入到模块中的对象列表。

angular.module('myApp', []);

这个方法相当于AngularJS模块的setter方法,是用来定义模块的。

参数
"myApp" 参数对应执行应用的 HTML 元素。

在模块定义中 [] 参数用于定义模块的依赖关系。
中括号[]表示该模块没有依赖,如果有依赖的话会在中括号写上依赖的模块名字。

调用这个方法时如果只传递一个参数,就可以用它来引用模块。例如,可以通过以下代码来引用myApp模块:

angular.module('myApp')

这个方法相当于AngularJS模块的getter方法,用来获取对模块的引用。
接下来,就可以在angular.module('myApp')返回的对象上创建我们的应用了。

module导入

上面的例子中,可以发现.module方法第二个参数是一个空数组,这个空数组是为了指定在此module中需要用到哪些其他的modules。

现在,我们定义另一个module,然后将其导入到我们定义好的名为myApp的module中:

angular.module('myApp.services', [])

.factory('testFactory', function(){
return {
Hello: function(){
return "Hello World!";
} }
});

可以看到,我们将此module命名为myApp.services并且为其定义了一个factory。注意到首行最后没有分号。

现在,将我们新定义的module导入到第一个module里:

angular.module('myApp', ['myApp.services']);

我们需要做的只是,将module使用引号包裹放入到.module方法第二个参数的空数组里面,多个modules使用逗号隔开。
现在我们就可以使用第二个module里的方法了:

angular.module('myApp', ['myApp.services'])

.run(function(testFactory){
var hello = testFactory.Hello();
console.log(hello);
});

控制台输出:Hello World!

添加控制器

var app = angular.module("myApp", []);

app.controller("myCtrl", function($scope) {
$scope.firstName = "John";
$scope.lastName = "Doe";
});

添加指令

var app = angular.module("myApp", []);

app.directive("runoobDirective", function() {
return {
template : "我在指令构造器中创建!"
};
});

不同module间的依赖注入

第一个module里定义一个factory

angular.module('myApp1', [])
.factory('Chats', function() {
return{
all: function() {
return '123';
}
}
});

第二个module里定义一个controller,在这个controller里注入module1的factory
注:这时在页面里调用是不行的,要么在[ ]里写入对module1的依赖['myApp1'],要么再写一个module3同时依赖于module1和module2

angular.module('myApp2', [])
.controller('c2', function($scope, Chats) {
$scope.pp=Chats.all();
});

写第三个module,同时依赖于module1和module2

angular.module('myApp3', ['myApp1','myApp2']);

然后在页面里调用module3的app和module2的controller,这样就行了

<div ng-app="myApp3" ng-controller="c2">
<h1>Hello {{pp}}</h1>
</div>

输出结果: Hello 123

原文:https://www.jianshu.com/p/d06cf28677ca

angular.module 详解的更多相关文章

  1. angular模块详解

    原文: https://www.jianshu.com/p/819421ff955a 大纲 1.angular应用是模块化的 2.对模块(Module)的认识 3.模块的分类:根模块和特性模块 4.N ...

  2. angular路由详解:

    1.$routeProvider ngRoute模块中的服务 2.otherwise:设置用于路由改变时,与任何其他定义的路由无法匹配的时候执行的代码 3.when:为$route服务定义新的路由 例 ...

  3. 简话Angular 04 Angular过滤器详解

    一句话: filter是万能的数据处理器,可以过滤数据,排序数据,删除数据,扩展数据 1. 内置filter大全 url: https://docs.angularjs.org/api/ng/filt ...

  4. angular指令详解--自定义指令

    自定义指令 directive()这个方法是用来定义指令的: angular.module('myApp', []) .directive('myDirective', function ($time ...

  5. angular路由详解六(路由守卫)

    路由守卫 CanActivate: 处理导航到某个路由的情况. CanDeactivate:处理从当前路由离开的情况. Resole:在路由激活之前获取路由数据. 1.CanActivate: 处理导 ...

  6. angular路由详解一(基础知识)

    本人原来是iOS开发,没想到工作后,离iOS开发原来越远,走上了前端的坑.一路走来,也没有向别人一样遇到一个技术上的师傅,无奈只能一个人苦苦摸索.如今又开始填angular的坑了.闲话不扯了.(本人学 ...

  7. AngularJs angular.identity和angular.noop详解

    angular.identity 函数返回本身的第一个参数.这个函数一般用于函数风格. ----------以上是官网对该接口的说明,只能说这个文档写得也太二,让人完全看不懂.要理解它的用途,可直接看 ...

  8. angular路由详解四(子路由)

    子路由是相对路由 路由配置部分: 主要是children const routes: Routes = [ {path:'home', component: HomeComponent, childr ...

  9. Angular ElementRef详解

    一.为什么要用ElementRef Angular 的口号是 - "一套框架,多种平台.同时适用手机与桌面 (One framework.Mobile & desktop.)&quo ...

随机推荐

  1. 全面系统Python3入门+进阶-1-5 一个经典误区

    结束

  2. (转载)文献可视化--vosviewer入门

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/weixin_42613298/artic ...

  3. Pycharm一些额外使用笔记

    (1)关于调试的一个小技巧: 在上面下栏的调试界面中可以修改变量a的值: (2)指定参数执行脚本: 第一步在run中指定edit configuration,然后在Parameters中指定训练的参数 ...

  4. 【Leetcode_easy】1029. Two City Scheduling

    problem 1029. Two City Scheduling 参考 1. Leetcode_easy_1029. Two City Scheduling; 完

  5. phar缓存 编译缓存 提高phar文件包加载速度

    phar文件可以把用到的PHP文件全部打包在一个文件中,十分方便网站部署.但是单个的PHP文件可以使用opcache缓存(字节码缓存),以提升PHP的运行速度.那么PHAR文件包如何使用缓存呢. 这里 ...

  6. oracle 存储过程详细介绍(创建,删除存储过程,参数传递等)

    这篇文章主要介绍了oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包等相关资料,需要的朋友可以参考下   oracle 创建,删除存储过程,参数传递,创建 ...

  7. Django时区导致的datetime时间比较报错

    我们使用python 的datetime模块比较Django数据库Datetime字段的时候,可能会出现报错: TypeError: can't compare offset-naive and of ...

  8. python 爬虫实例(二)

    环境: OS:Window10 python:3.7 描述 打开下面的网址,之后抓取其中的图片 https://music.163.com/#/artist/album?id=101988&l ...

  9. JS Maximum call stack size exceeded

    一.问题描述 Maximum call stack size exceeded  翻译为:超过最大调用堆栈大小 二.效果截图 三.问题解决方案 出现该问题,说明程序出现了死循环了.所以要去检查出错的程 ...

  10. 按键板的原理与实现----ADC

    在嵌入式系统产品开发中,按键板的设计是最基本的,也是项目评估阶段必须要考虑的问题.其实现方式又很多种,具体使用那一种就需要结合特定IC的可用IO数量,并综合考虑成本,做出最终选择.本系列文章将介绍多种 ...