如何找到一个原因AngularJS“Argument'MyCtrl'不是一个函数,未定义”

时间:2014-11-07 09:13:22

标签: javascript angularjs

当AngularJS崩溃时出现错误" 参数' MyCtrl'不是一个功能,未定义"找到原因可能有点挑战。

在这里,我想制作一个"检查清单",出现错误时应该检查什么

2 个答案:

答案 0 :(得分:47)

  1. 文件是' MyCtrl'通过HTML连接? (如果你连接或丑化你的文件,请检查两次)
  2. <script src='path/to/controllers.js'></script>
    
    1. 是&#39; MyCtrl&#39;正确定义
    2. 有一些模式:

      app.controller('MyCtrl', ['$scope', function ($scope) {...}])
      
      app.controller('MyCtrl', function ($scope) {...})
      
      var MyCtrl = function ($scope) {...})
      
      1. 是&#39; MyCtrl&#39;在右侧模块中定义?
      2. 是&#34; MyCtrl&#34;&#34;模块已添加到应用依赖项
      3. angular.module('app', ['app.sources']);
        
        1. 如果您定义模块多次次,则应按此顺序定义

          • 首先定义应该像
        2. angular.module('app.sources', []);
          

          (使用 [ ]

          • 后续定义应该像
          angular.module('app.sources');
          

          (不包含 [ ]

          重要:声明顺序非常重要 - [ ] 的定义应该先行。

          1. 检查模块 仅定义一次。 复制粘贴后,您可能忘记重命名模块。检查src是否像
          2. 一样
            angular.module('app.sources', []);
            
            1. 检查您的 'ng-app'。最好只使用其中一个名称为ng-app='app'(换句话说,不要定义多个未命名的ngApp指令)

            2. 您的控制器的语法是否适合您的AngularJS版本

            3. (Angular 1.0.x 1.2.x 的定义与更高版本之间存在差异。当Angular版本大于 1.3.x ,您不能声明全局构造函数并将其与ng-controller一起使用)

答案 1 :(得分:1)

如果您正在使用ng-controller和#34;控制器作为&#34;语法,请务必检查控制器的名称是否正确。

我的情况:

//controller register    
angular.module("myApp").controller("someController", SomeController)

//in my code
<div ng-controller="SomeController as vm"></div>

请注意,我使用了ng-controller="SomeController as vm",其中SomeController的资本为S。 它本应使用小写s,因为这是我注册的方式。

因此,请检查您的控制器名称是否正确。