angularjs+requirejs按需加载

很久没上过csdn了,久到忘记了密码。事情多了,记性也不好,上来更新一下最近自己遇到的问题,也算是写个备忘录。

问题

是这样的,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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值