角度控制器错误'参数'MainCtrl'不是函数,未定义'

时间:2014-12-12 23:58:26

标签: angularjs

今天下午我突然遇到以下AngularJS错误:Argument 'MainCtrl' is not a function, got undefined

我有一个很好的版本仍在Chrome中运行,没有任何错误,所以我试图找到差异 - 但无济于事。

对于如何解决错误Argument 'MainCtrl' is not a function, got undefined

,我们不胜感激

我在index.html中加载controllers.js文件 - 在正文部分中:

 <!DOCTYPE html>
 <html ng-app="rage.ui">

 <head>
     <!-- loading css files here... -->
 </head>

 <body ng-controller="MainCtrl as main">

  <!-- Wrapper-->
  <div id="wrapper">
     <!-- Navigation -->
  </div>

  <script src="app/app.js"></script>
  <script src="app/config.js"></script>
  <script src="app/js/controllers.js"></script>

</body>

这是我的controllers.js文件中的MainCtrl(也在index.html中加载) -

* MainCtrl - controller */

(function () {
 'use strict';
 angular.module('rage.ui')
    .controller('MainCtrl', ['$scope', '$interval', '$window', 'widgetDefinitions', main])
    .factory('widgetDefinitions', [widgetDefinitions])
    .value('defaultWidgets', [
    { name: 'random' },
    { name: 'time' },
    { name: 'datamodel' },
    {
        name: 'random',
        style: {
            width: '50%'
        }
    },
    {
        name: 'time',
        style: {
            width: '50%'
        }
    }
    ]);

function main($scope, $interval, $window, widgetDefinitions, defaultWidgets) {
    this.userName = 'Risk user';
    // ...
}
  function widgetDefinitions(RandomDataModel) {
    return [
      {
          name: 'random',
          directive: 'wt-scope-watch',
          attrs: {
              value: 'randomValue'
          }
      }
      {
          name: 'treegrid',
          templateUrl: 'app/views/templateGadget/treeGrid.html',
          title: "Tree Grid Report",
          attrs: {
              width: '50%',
              height: '250px'
          }
      }
    ];
  }

})();

在我尝试向malhar Angular-Dashboard框架中添加一个新的“gadgetModelFactory”时,我打破了我的系统。 这是我的新工厂的好版本,现在已修好:

'use strict';

angular.module('rage').
factory('gadgetDataModel', function ($scope, WidgetDataModel) {
function gadgetDataModel() {
    var test = 123;
}

gadgetDataModel.prototype = Object.create(WidgetDataModel.prototype);
gadgetDataModel.prototype.constructor = WidgetDataModel;

angular.extend(gadgetDataModel.prototype = {        
    init: function () {
        // to be overridden by subclasses
        var dataModelOptions = this.dataModelOptions;
    },

    destroy: function () {
        // to be overridden by subclasses
        WidgetDataModel.prototype.destroy.call(this);
        $interval.cancel(this.intervalPromise);
    }
});

});

和我的app.config:

(function () {
angular.module('rage.ui', [
    'ui.router',
    'ui.bootstrap',
    'ui.dashboard'
])
})();

2 个答案:

答案 0 :(得分:1)

  1. 查看其他帖子(AngularJS error: 'argument 'FirstCtrl' is not a function, got undefined'
  2. 检查您是否正确定义了ng-app
  3. 检查您是否在索引中正确列出了JS文件
  4. 尝试以更传统的方式重写控制器(参见egghead.io教程)

答案 1 :(得分:0)

也许您有两个具有相同模块名称的.js文件。例如:

file1.js:

var appControllers = angular.module('appControllers', []);

file2.js:

var appControllers = angular.module('appControllers', []);