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被调用的时候, ...
随机推荐
- 算法练习,链表二分最大n个
import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; public class Bin ...
- [Shell]Bash基本功能:通配符与特殊符号
/*------------------------------------------------------------------------------------------- @黑眼诗人 ...
- 吴裕雄 python oracle子查询的用法(3)
import cx_Oracle conn = cx_Oracle.connect("scott/admin@localhost:1521/orcl")cursor = conn. ...
- pyspark 逻辑回归程序
http://www.qqcourse.com/forum.php?mod=viewthread&tid=3688 [很重要]:http://spark.apache.org/docs/lat ...
- springboot 集成 redis
导入maven依赖 <!-- springboot整合 redis --> <dependency> <groupId>org.springframework.bo ...
- 安装linux版zabbix客户端
安装linux版zabbix客户端 一.下载客户端 查看centos系统内核版本 cat /proc/version 如上图,就选择Linux 2.6系统对应的agent版本程序 打开官网:https ...
- create-react-app之proxy
[create-react-app之proxy] create-react-app可以用于一键创建web_client环境,默认使用webpack-dev-server.但在开发过程中,往往需要cli ...
- SO减单后MO分配给其他SO的问题修复
逻辑:MO取进FP系统之前,首先判断是否带有SO号+SO行号,如果带有SO号+SO行号,则判断此SO号和SO行号是否存在订单表中,如果不存在则表示此MO对应的订单已减单,此MO需要做过滤,并展现在报表 ...
- day22 面向对象基础
1.什么是面向过程 在介绍面向对象之前,要先明确面向过程 在这之前我们所写的任何代码都是面向过程的 什么是面向过程? 是一种编程思想 面对 朝向 在编写代码时,要时刻想着过程这两个字 过程指的是什么? ...
- BeautifulSoup中查找元素 select() 和find()区别
从html中查找元素,之前一般都用find(),查找符合条件的第一个,如下 f = open(file, 'r') # 读取文件内容content = f.read()soup= BeautifulS ...