AngularJS 实现按需异步加载

习惯了 seajs 的异步加载方式,也想着 angular 也能一样使用异步加载,可是事实不随人愿。html

angularjs 和 requirejs 同样,使用的是预先加载的方式组织模块(这和 seajs 的懒加载正好相反),当一个单页面应用的模块愈来愈多时,也就意味着须要预加载的模块也会愈来愈多,这也许也就说明了 angular 更适合用来开发轻应用。git


正式开始

路由我使用了angular-ui-router,模块加载器是 requirejsangularjs

//路由
{
    state : 'login',
    templateUrl : 'login/login.html',
    controller : 'loginCtrl',
    resolve: {
        realCtrl : function ($q) {
            var def = $q.defer();
            require(['/features/login/login.js'], function (loginCtrl) {
                def.resolve(loginCtrl)
                $rootScope.$apply();
            });
            return def.promise;
        }
    }
},

// 得到$controllerProvider
app.config(function($controllerProvider) {
    app.registerController = $controllerProvider.register;
    // ...
})

// loginControler
app.registerController('loginCtrl', function ($scope) {
   // do something
});

参考

angular应用如何实现按需加载github

相关文章
相关标签/搜索