在此之前我们首先要先了解几个东西:

$q
简介:
$q:主要解决的是异步编程的问题,是指描述通过一个承诺行为与对象代表的异步执行的行动结果的交互,可能会也可能不会再任何时候完成。
我们通过一个小故事理解 $q 服务。
使用
我们在服务中这样定义,在请求开始之间建立deferred,然后return deferred.promise.在获取到数据的时候deferred.resolve(data)。同样我们在中间可以收到通知或者拒绝等。
var def = $q.defer(); def.resolve(data); return def.promise;
按需加载
首先我们要了解一下几点:
1、什么时机下加载:
在 ngRoute 和 uiRoute 中都提供了 resolve 属性里的值会在路由成功前被预先设定好,然后注入到控制器中。通俗地将,就是等数据都“就位”后,才进行路由(其实我觉得也不能叫路由,因为路由是一些列的操作,其中就包括了设置 resolve 属性等等)。可以参考我的上篇文章。
2、加载后的文件如何注册:
angular有个启动函数,叫做bootstrap。 根据angular的代码设计,你需要在启动之前定义所有的controller。就好似有个袋子,你在bootstrap之前想往里塞什么就塞什么。可是一旦bootstrap了,他就不再接受你任何往里塞的controller了。
解决这个问题,只有一个方法,就是利用主模块的provider主动注册controller。但是由于provider不能直接使用,所以我们把它存在主模块下面。通过存下来的方法,可以用来注册异步加载回来的页面组件。
通过上述我们知道了需要异步加载文件
实现
// controller
define(["app"], function(app) {
app.config(["$stateProvider", "$urlRouterProvider", "$controllerProvider",
function($stateProvider, $urlRouterProvider, $controllerProvider) {
// angular有个启动函数,叫做bootstrap;
// 根据angular的代码设计,你需要在启动之前定义所有的controller;
// 就好似有个袋子,你在bootstrap之前想往里塞什么就塞什么;
// 可是一旦bootstrap了,他就不再接受你任何往里塞的controller了;
// 解决这个问题,只有一个方法,就是利用主模块的provider主动注册controller;
// 但是由于provider不能直接使用,所以我们把它存在主模块下面;
// 通过存下来的方法,可以用来注册异步加载回来的页面组件。
app.registerController = $controllerProvider.register;
app.loadFile = function(js) {
return function($rootScope, $q) {
//通过$q服务注册一个延迟对象 deferred
var def = $q.defer(),
deps = [];
angular.isArray(js) ? (deps = js) : deps.push(js);
require(deps, function() {
$rootScope.$apply(function() {
// 成功
def.resolve();
// def.reject() 不成功
// def.notify() 更新状态
});
});
//通过deferred延迟对象,可以得到一个承诺promise,而promise会返回当前任务的完成结果
return def.promise;
};
}
$urlRouterProvider.otherwise('/index');
$stateProvider.state("index", {
url: "/index",
template: "这是首页页面"
});
$stateProvider.state("computers", {
url: "/computers",
template: "这是电脑分类页面{{title}}",
controller: "ctrl.file",
resolve: {
loadFile: app.loadFile("file")
}
});
$stateProvider.state("printers", {
url: "/printers",
template: "这是打印机页面"
});
$stateProvider.state("blabla", {
url: "/blabla",
template: "其他"
});
}
]);
});
// file.js
define(["app"], function(app) {
app.registerController("ctrl.file", function($scope) {
$scope.title = "--测试 ";
});
});
源码:requireLearn_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# angularjs
# 按需加载
# angularjs按需加载js
# 异步加载
# AngularJS中的按需加载ocLazyLoad示例
# 探索angularjs+requirejs全面实现按需加载的套路
# AngularJS 实现按需异步加载实例代码
# 有个
# 这是
# 加载
# 往里
# 他就
# 你在
# 把它
# 给了
# 只有一个
# 要了
# 解决这个问题
# 可以用来
# 的是
# 完成了
# 几个
# 是个
# 不可能
# 我说
# 我觉得
# 都要
相关文章:
SQL查询语句优化的实用方法总结
长沙做网站要多少钱,长沙国安网络怎么样?
,怎么在广州志愿者网站注册?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何配置IIS站点权限与局域网访问?
如何打造高效商业网站?建站目的决定转化率
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
javascript基本数据类型及类型检测常用方法小结
小建面朝正北,A点实际方位是否存在偏差?
网站制作的步骤包括,正确网址格式怎么写?
香港服务器部署网站为何提示未备案?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
,交易猫的商品怎么发布到网站上去?
如何选择适合PHP云建站的开源框架?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何高效利用200m空间完成建站?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
c# 服务器GC和工作站GC的区别和设置
如何实现建站之星域名转发设置?
广州营销型建站服务商推荐:技术优势与SEO优化解析
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
网站制作壁纸教程视频,电脑壁纸网站?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
测试制作网站有哪些,测试性取向的权威测试或者网站?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
如何用虚拟主机快速搭建网站?详细步骤解析
招商网站制作流程,网站招商广告语?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何选择CMS系统实现快速建站与SEO优化?
大型企业网站制作流程,做网站需要注册公司吗?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
如何在橙子建站中快速调整背景颜色?
如何用搬瓦工VPS快速搭建个人网站?
制作网站的基本流程,设计网站的软件是什么?
定制建站如何定义?其核心优势是什么?
制作网页的网站有哪些,电脑上怎么做网页?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
盐城做公司网站,江苏电子版退休证办理流程?
如何快速查询网址的建站时间与历史轨迹?
定制建站价位费用解析与套餐推荐全攻略
如何快速重置建站主机并恢复默认配置?
C++如何编写函数模板?(泛型编程入门)
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
建站之星与建站宝盒如何选择最佳方案?
建站主机是什么?如何选择适合的建站主机?
*请认真填写需求信息,我们会在24小时内与您取得联系。