AngularJS——第9章 模块加载
第9章 模块加载
AngularJS模块可以在被加载和执行之前对其自身进行配置。我们可以在应用的加载阶段配置不同的逻辑。
【AngularJS执行流程】
- 启动阶段(startup)
- 开始 --> 浏览器解析DOM树 --> 遇到angular.js停止解析,开始执行脚本 --> Angular监听到DOMContentLoaded事件 --> 启动Angular应用
- 初始化阶段(initial)
- 启动Angular应用 --> 查找模块依赖 --> 寻找ng-app指令 --> 初始化必要组件($injector/$compile/$rootScope) --> 配置和运行 --> 开始解析DOM树
- 编译、链接(compile/link)
- 开始解析DOM树 --> $compile遍历DOM树,搜集指令 --> 执行每个指令的compile函数 --> 处理DOM转换,编译模板 --> 调用链接函数,生成实时视图
- 运行阶段(running)
- 调用链接函数,生成实时视图 --> 等待事件触发,执行$digest循环 --> 检测到变化,调用$watch函数 --> 再次执行$digest循环,直到没有变化 --> 结束
9.1 配置块
通过config方法实现对模块的配置,AngularJS中的服务大部分都对应一个“provider”,用来执行与对应服务相同的功能或对其进行配置。
比如$log、$http、$location都是内置服务,相对应的“provider”分别是$logProvider、$httpProvider、$locationPorvider。
- 以$log为例进行演示,修改配置
//对$log服务进行配置
App.config(['$logProvider', function ($log) {
//关闭debug级别信息提示
$log.debugEnabled(false);
}]);
App.controller('DemoController', ['$scope', '$log', function ($scope, $log) {
$scope.showLog = function () {
$log.log('日志');
$log.warn('警告');
//已被关闭,将不再生效
$log.log('调试');
}
}]);
- 以$filter为例进行演示,实现相同功能
//对$filter服务进行配置,实现相同的功能
App.config(['$filterProvider', function ($filterProvider) {
//注册一个名叫myFilter的过滤器
$filterProvider.register('myFilter', function () {
return function (input, arg) {
return input + ' study at myFilter' + arg;
}
});
}]);
9.2 运行块
- 服务也是模块形式存在的且对外提供特定功能,前面学习中都是将服务做为依赖注入进去的,然后再进行调用,除了这种方式外我们也可以直接运行相应的服务模块,AngularJS提供了run方法来实现。
//运行$http、$rootScope服务
App.run(['$http', '$rootScope', function ($http, $rootScope) {
$http({
method: 'post',
url: 'example.php'
}).success(function (data) {
$rootScope.name = data;
});
}]);
不但如此,run方法还是最先执行的,利用这个特点我们可以将一些需要优先执行的功能通过run方法来运行,比如验证用户是否登录,未登录则不允许进行任何其它操作。
注:此知识点意在了解AngularJS的加载机制。
AngularJS——第9章 模块加载的更多相关文章
- Angularjs 异步模块加载项目模板
ng-lazy-module-seed(Angularjs 异步模块加载项目模板) 相信做过SPA项目的朋友都遇到过这个问题:页面初始化时需要加载文件太大或太多了,许多文件加载后很可能不会运行到,这是 ...
- 第三章:模块加载系统(requirejs)
任何一门语言在大规模应用阶段,必然要经历拆分模块的过程.便于维护与团队协作,与java走的最近的dojo率先引入加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现. ...
- node模块加载层级优化
模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...
- 使用RequireJS并实现一个自己的模块加载器 (一)
RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...
- AngularJS中的按需加载ocLazyLoad
欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...
- AngularJS 实现按需异步加载
习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...
- AngularJS中的按需加载ocLazyLoad插件应用;
一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当我们的网站渐渐庞大起来,这样子的加载策略让网速初始化速度变得越 ...
- Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)
模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...
- 也谈模块加载,吐槽CMD
先吐槽CMD,不要没头没脑的搞出个CMD,没意思. 大家都看AMD好了,异步模块加载机制,CMD并没有改变这个模式. 模块加载的关口就是getCurrentScript,每次define被调用的时候, ...
随机推荐
- 重建redo文件
需求背景 由于前期安装oracle时redo文件大小或者路径规划不合理需要进行修改,以便满足性能测试要求.redo文件规划大小建议与生产环境一致. 重做日志相关数据字典 1.v$log 记录数据库中 ...
- Hibernate 再接触 组件映射
将另外一个类嵌入到另外一个类 从而合并生成一张表 Husband.java package com.bjsxt.hibernate; import javax.persistence.Embedded ...
- Hibernate 再接触 基础配置 搭建Log4j环境 Junit日志环境等
<!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.aut ...
- oracle合并语句
在sql server中的合并语句可以用xml path 详见http://www.cnblogs.com/codeyu/archive/2010/05/25/1743474.html 而oracle ...
- 逻辑回归 logit
[方法转]http://www.powerxing.com/logistic-regression-in-python/ http://blog.csdn.net/lipengcn/article/d ...
- property 、classmethod 、 staticmethod 的用法
@property # property是一个装饰器函数 ,作用:将一个方法伪装成属性 # 所有的装饰器函数都怎么用? 在函数.方法.类的上面一行直接@装饰器的名字 # 装饰器的分类: # 装饰函数 ...
- soap 简单调用其他系统的函数
<?xml version ='1.0' encoding ='UTF-8' ?> <definitions name='自定义名称' targetNamespace='目标命名空间 ...
- 解决SMARTFORMS文本编辑器不能打开
在DEV打开SMARTFORMS文本编辑器时,出现如下错误 由于宏安全设置,无法找到宏或宏被禁用. 解决方法如下: 在DEV环境新建程序后输入如下代码执行即可. *&------------- ...
- Excel 如何快速切换到最后一行
1.快速切换到最后一行,是ctrl+↓箭头(来源:百度) 2. http://www.office68.com/excel/22936.html 一.定位到第一个单元格 方法1: ...
- SpringMVC Controller 单例 多例
对于SpringMVC 的Controller单例还是多例.下面举例说明:第一次:类是多例,类里包含一个普通属性,一个静态属性 结果:普通属性:0.............静态属性:0 普通属性:0. ...