我使用angular-seed和index-async.html啓動了一個角度項目,默認情況下它使用angular-loader和script.js。我爲這個項目增加了兩個控制器,每個控制器分別放在兩個文件中 該文件用於第一控制器開始這樣的:使用angular-loader和scriptjs異步加載多個控制器
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']);
});
當我運行應用程序時,有時它的工作原理,有時我得到的錯誤:
Uncaught Error: [$injector:nomod] http://errors.angularjs.org/1.2.20/ $injector/nomod?p0=myApp.controllers
Error: [ng:areq] Argument 'FirstCtrl' is not a function, got undefined
注意。爲了簡潔,我已經省略了routeprovider,但是我首先使用FirstCtrl進入路由。如果我使用SecondCtrl進行路由,我會遇到類似的問題。
我不認爲我已經用angular-seed改變了太多,所以我想知道如果我正在添加更多的控制器是否正確?
檢查你的'FirstCtrl'是否正確。 'angular.module('myApp.controllers')。controller('FirstCtrl',function($ scope){});'還要注意,你的加載器是異步的。所以它有時可以在應用初始化之前加載控制器 – akn
@akn我認爲這是角加載器在那裏的原因 - 所以scriptjs可以以任何順序加載角文件。 – Steve
@Steve是,以任何順序,但有一個例外:模塊聲明'angular.module('myApp.controllers',[])'必須在將模塊實例返回到'angular.module('myApp.controllers')之前運行'。 – runTarm