第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章 模块加载的更多相关文章

  1. Angularjs 异步模块加载项目模板

    ng-lazy-module-seed(Angularjs 异步模块加载项目模板) 相信做过SPA项目的朋友都遇到过这个问题:页面初始化时需要加载文件太大或太多了,许多文件加载后很可能不会运行到,这是 ...

  2. 第三章:模块加载系统(requirejs)

    任何一门语言在大规模应用阶段,必然要经历拆分模块的过程.便于维护与团队协作,与java走的最近的dojo率先引入加载器,早期的加载器都是同步的,使用document.write与同步Ajax请求实现. ...

  3. node模块加载层级优化

    模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载.但是随着应用规模的加大,目录层级越来越深,若是在某个 ...

  4. 使用RequireJS并实现一个自己的模块加载器 (一)

    RequireJS & SeaJS 在 模块化开发 开发以前,都是直接在页面上引入 script 标签来引用脚本的,当项目变得比较复杂,就会带来很多问题. JS项目中的依赖只有通过引入JS的顺 ...

  5. AngularJS中的按需加载ocLazyLoad

    欢迎大家讨论与指导 : ) 初学者,有不足的地方希望各位指出 一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当 ...

  6. AngularJS 实现按需异步加载

    习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...

  7. AngularJS中的按需加载ocLazyLoad插件应用;

    一.前言 ocLoayLoad是AngularJS的模块按需加载器.一般在小型项目里,首次加载页面就下载好所有的资源没有什么大问题.但是当我们的网站渐渐庞大起来,这样子的加载策略让网速初始化速度变得越 ...

  8. Python 模块化 模块搜索顺序、重复导入、模块加载列表(五)

    模块搜索顺序.重复导入.模块加载列表 0x00 模块搜索顺序: 举例: #test.py import sys for p in sys.path: print(p) 运行结果: C:\python ...

  9. 也谈模块加载,吐槽CMD

    先吐槽CMD,不要没头没脑的搞出个CMD,没意思. 大家都看AMD好了,异步模块加载机制,CMD并没有改变这个模式. 模块加载的关口就是getCurrentScript,每次define被调用的时候, ...

随机推荐

  1. [jQ]使用jQuery将多条数据插入模态框的方法

    ---------------------------------------------------------------------------------------------------- ...

  2. vscode 右击文件||文件夹添加快捷方式

    操作注册表步骤 1.按下win+R 2.输入redegit,打开注册表 3.找到HKEY_CLASSES_ROOT/*/shell路径 4.新建/项:命名Open with visual code 5 ...

  3. curl命令解析

    curl命令可以实现http post或者get的请求,是linux下的命令行工具 1.1.直接请求url,打印标准输出 1.2.使用-o参数,可以标准输出到指定的位置 [root@VM-3-10-1 ...

  4. windows 10 专业版 激活

    参考文章:https://jingyan.baidu.com/article/c14654134b99de0bfcfc4c8c.html http://www.windowszj.com/news/2 ...

  5. 面图层拓扑检查和错误自动修改—ArcGIS案例学习笔记

    面图层拓扑检查和错误自动修改-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据源: gis_ex10\ex01\parcel.shp, ...

  6. 如何配置eclipse的安卓SDK下载目录

    首先,打开eclipse,主界面如图 2 点击Windows下的preference 3 然后在出现的对话框中选择“android” 4 然后我们就能看到的主界面,在这里输入android sdk的目 ...

  7. hadoop2.7.7 测试安装 centos7

    useradd –m hadoop –s /bin/bash passwd hadoop   增加sudo权限 chmod u+w /etc/sudoers vi /etc/sudoers root ...

  8. waffit防火墙检测

    Waffit是一款Web应用防火墙检测工具,检测防火墙保护的站点是在渗透测试中非常重要的一步.如果没有对WAF进行配置,有时候可能存在漏洞.在渗透测试和风险评估中分析WAF也是非常重要的.通过编码攻击 ...

  9. 04_web基础(六)之请求转发与重定向

    1.交互方式 Web组件之间跳转: 从AServlet 跳转到 BServlet. 三种类型: 1:请求转发(forward) 2:URL重定向(redirect) 3:请求包含(include) 3 ...

  10. 04_web基础(二)之web构建

    03.04.05.06web项目创建 07.第一个Servlet程序 1.拷贝tomcat 中的 servlet-api.jar 在lib包下面 2.新建一个HelloWordServlet类并实现 ...