angularjs+requirejs按需加载
2015-12-17 10:11
621 查看
很久没上过csdn了,久到忘记了密码。事情多了,记性也不好,上来更新一下最近自己遇到的问题,也算是写个备忘录。
下面是state赋值时需要注意到的,loadJs实现上面有,就是异步加载需要的模块(不重要的内容用 … 省略)
然后注册controller的时候这样做(这里是loadJs需要异步加载的模块)
https://github.com/zhoulijie/angularjs-controller-load-on-demand
问题
是这样的,angularjs是预加载方式。一个应用模块不多的时候到无所谓。但是一个大型应用预加载还是很难让人接受的。网上看到一些解决方案,用ocLazyLoad的挺多,我试着用了一次,个人感觉配置麻烦。于是就有了下面的解决方案:我用的是angularjs + requirejs解决方案
define(['app','navData'], function (app) { app.config(function($stateProvider, $urlRouterProvider, $controllerProvider, navData){ app.registerController = $controllerProvider.register; app.loadJs = function(js){ return function($rootScope, $q){ var def = $q.defer(), deps=[]; angular.isArray(js) ? (deps = js) : deps.push(js); require(deps,function(){ $rootScope.$apply(function(){ def.resolve(); }); }); return def.promise; }; } $urlRouterProvider.otherwise('/memory'); angular.forEach(navData, function(it){ var st = it.state.split(/\./gi), ctrlPath = 'controllers/' + st[0], ctrlName = 'ctrl.' + st[0] ; $stateProvider.state(st[0],{ url : '/' + st[0], templateUrl : 'tpls/' + st[0] + '.html', controller : ctrlName, resolve:{ deps:app.loadJs(ctrlPath) } }); }) }); });
关键
这句是将controller的注册引用到registerController上app.registerController = $controllerProvider.register;
下面是state赋值时需要注意到的,loadJs实现上面有,就是异步加载需要的模块(不重要的内容用 … 省略)
... resolve:{ deps:app.loadJs(ctrlPath) } ...
然后注册controller的时候这样做(这里是loadJs需要异步加载的模块)
define(['app'],function(app){ app.registerController('ctrl.memory',function(){}); });
Demo
下面是我写的Demo,有不懂的可以下载来看看。https://github.com/zhoulijie/angularjs-controller-load-on-demand
相关文章推荐
- Angular - - $anchorScroll、$controller、$document
- Angular - - $interval 和 $timeout
- Angular - - $animate
- Angular - - $interpolate 和 $parse
- Angular - - $location 和 $window
- Angular - - $q 承诺与延迟
- Angular - - $sce 和 $sceDelegate
- Angular - - filter 过滤器
- Angular - - $resource 更高端的数据交互
- Angular - - ngRoute Angular自带的路由
- Angular Cookies 操作
- Angular - - 脏值检查及其相关
- AngularJs ui-router 路由的介绍
- angularJS权威教程自动化测试笔记(二)端到端的介绍
- AngularJS Best Practices: resource
- AngularJs ui-router 路由的简单介绍
- Angular2组件开发—调用服务(二)
- (笔记)angular 的根据后台StateCode本地显示指定文案
- Angular2组件开发—调用服务(一)
- Angular2组件开发—表单输入(五)