在AngularJS中动态加载控制器以进行路由

时间:2014-09-14 08:02:48

标签: angularjs routing controllers

我需要从某些目录动态加载控制器,即代替:

$routeProvider.when(path, {
    templateUrl: 'templates' + path + '.html',
    controller: 'myController'
});

应该指出它所在的目录:

$routeProvider.when(path, {
    templateUrl: 'templates' + path + '.html',
    controller: 'controllerDir/myController'
});

我想应该有一些标准方法(?)。可能有一些方法可以使用动态加载包含控制器的文件,类似于qQuery fashion(getScript)?

3 个答案:

答案 0 :(得分:2)

要动态加载控制器,您需要使用RequireJS。

http://requirejs.org/

有一个util可以更容易地将RequireJS集成到AngularJS app

https://github.com/marcoslin/angularAMD

答案 1 :(得分:2)

Route具有resolve属性,可以利用该属性来实现控制器的动态加载。

此链接可以帮助您入门:

http://weblogs.asp.net/dwahlin/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs

另一方面,只有在拥有大量控制器时才考虑动态加载脚本。最好先预先加载脚本(可以捆绑和缩小),并让浏览器缓存它们,以便为用户提供流畅的体验

答案 2 :(得分:0)

您也可以使用此方法:https://github.com/kapysh/angular-dynamic-loader

只需从repo loadctrl.directive.js

获取指令

并在您的模板中:

<div load-ctrl="portalController"></div>

并在app.js中:

portal.constant('CONTROLLER_PATHS', {
  'portalController': {
    path: 'static/angular_app/js/controllers/portal.controller.js',
    loaded: false
  }
})