AngularJS控制器不知何故发生冲突

时间:2014-01-24 19:02:20

标签: angularjs

我有一个包含多个视图和控制器的应用程序。控制器在单独的.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]);
})();

是否有一些我没看到的拼写错误,或者我是否做了一些根本错误的事情?

1 个答案:

答案 0 :(得分:2)

您在第一个代码示例中声明了两次app模块:

var app = angular.module("app", []);    

模块只能注册一次。要引用已注册的模块,您应该从函数中删除第二个参数:

var app = angular.module("app");