Sagar Ganatra 写了一篇很有帮助的文章博客文章 http://www.sagarganatra.com/2014/08/lazy-loading-angularjs-components-using-providers.html关于代码分割。
令人惊讶的是,Angular 的模块系统并不真正支持代码分割。然而,有一种方法可以通过在配置阶段保存对 Angular 特殊提供程序的引用来实现代码分割。
[...] 当 Angular 初始化或引导应用程序、功能 - 控制器、服务等时。在模块实例上可用。这里,我们是延迟加载组件,以后功能就无法使用了;因此我们必须使用各种提供程序函数并注册这些组件。这些提供程序仅在 config 方法中可用,因此当应用程序初始化时,我们必须在 config 函数中存储这些提供程序的引用。
window.app.config([
'$routeProvider',
'$controllerProvider',
'$compileProvider',
'$filterProvider',
'$provide',
function ($routeProvider, $controllerProvider, $compileProvider, $filterProvider, $provide) {
$routeProvider.when('/login', {
templateUrl: 'components/login/partials/login.html',
resolve: {
load: ['$q', '$rootScope', function ($q, $rootScope) {
var deferred = $q.defer();
// lazy load controllers, etc.
require ([
'components/login/controllers/loginController',
'components/login/services/loginService'
], function () {
$rootScope.$apply(function () {
deferred.resolve();
});
});
return deferred.promise;
}]
}
});
//store a reference to various provider functions
window.app.components = {
controller: $controllerProvider.register,
service: $provide.service
};
}
]);
现在在你的loginController
例如你写
app.components.controller('loginController');
延迟定义您的新控制器。
如果您也想延迟加载模板,我建议使用用户界面路由器 https://github.com/angular-ui/ui-router。在那里你可以指定一个templateProvider
这是基本上是一个异步加载模板的函数 https://github.com/angular-ui/ui-router/wiki#templates