我有一个包含多个视图和控制器的应用程序。控制器在单独的.js文件中定义,并包含在主页的底部。但是,在加载应用程序时,其中一个控制器无法加载。我简化了这个问题,并将两个JS文件的完整内容合并为一个。
使用下面的代码,我得到Argument 'ShellCtrl' is not a function, got undefined
:
(function () {
var app = angular.module("app", []);
var shellCtrl = function ($scope, $log) {
// ....
app.controller("ShellCtrl", ["$scope", "$log", shellCtrl]);
})();
(function () {
var app = angular.module("app", []);
var svcCenterSettingsCtrl = function($log) {
// ....
app.controller("ServiceCenterSettingsCtrl", ["$log", svcCenterSettingsCtrl]);
})();
如果首先注册ServiceCenterSettingsCtrl
,那么我会获得Argument 'ServiceCenterSettingsCtrl' is not a function, got undefined
。
但是,如果我在下面的同一个自执行功能中注册它们,它就可以工作。
(function () {
var app = angular.module("app", []);
var shellCtrl = function ($scope, $log) {
// ....
app.controller("ShellCtrl", ["$scope", "$log", shellCtrl]);
var svcCenterSettingsCtrl = function($log) {
// ....
app.controller("ServiceCenterSettingsCtrl", ["$log", svcCenterSettingsCtrl]);
})();
是否有一些我没看到的拼写错误,或者我是否做了一些根本错误的事情?
答案 0 :(得分:2)
您在第一个代码示例中声明了两次app模块:
var app = angular.module("app", []);
模块只能注册一次。要引用已注册的模块,您应该从函数中删除第二个参数:
var app = angular.module("app");