使用angular-loader和script js将多个控制器异步加载到单独的文件中

时间:2014-07-20 09:22:57

标签: angularjs angular-seed

我使用angular-seed启动了一个角度项目,而使用index-async.html,它默认使用angular-loader和script.js。我为这个项目添加了两个控制器,每个控制器都有两个独立的文 第一个控制器的文件如下所示:

angular.module('myApp.controllers').controller('FirstCtrl', ...

第二个控制器的文件如下所示:

angular.module('myApp.controllers').controller('SecondCtrl', ...

然后在主app.js文件中:

angular.module('myApp.controllers', []);
angular.module('myApp', [
  'myApp.controllers'
])

所有三个文件都添加到了script.js:

$script([
      'bower_components/angular/angular.js',
      'bower_components/angular-route/angular-route.js',

      'js/app.js',

      'js/controllers/first-ctrl.js',
      'js/controllers/second-ctrl.js',
    ], function() {
      angular.bootstrap(document, ['myApp']);
    });

当我运行应用程序时,有时它会起作用,有时我会收到错误:

  

未捕获错误:[$ injector:nomod] http://errors.angularjs.org/1.2.20/ $ injector / nomod?p0 = myApp.controllers

     

错误:[ng:areq]参数'FirstCtrl'不是函数,未定义

请注意。为了简洁,我省略了routeprovider,但我首先使用FirstCtrl进入路线。如果我选择使用SecondCtrl进行路由,我会遇到类似的问题。

我不认为我用angular-seed改变了太多,所以我想知道我是否正在添加更多控制器吗?

1 个答案:

答案 0 :(得分:0)

我发现$ script.js v2(尚未发布)已经支持并行脚本加载,但也保留了执行顺序。

您可以尝试通过以下文件中的复制内容对其进行升级,并替换index-async.html中的旧内容。

https://github.com/ded/script.js/blob/v2/src/script.js