如何find一个理由AngularJS“参数”MyCtrl“不是一个函数,得到了未定义的”

当AngularJS崩溃时出现错误“ 参数”MyCtrl“不是一个函数,得到了未定义 ”这可能是有点挑战find一个原因。

在这里我想做一个“检查清单”,你应该检查什么时候出现错误

  1. 与“MyCtrl”通过HTML连接的文件 ? (如果您连接或uglify您的文件检查两次)
<script src='path/to/controllers.js'></script> 
  1. 'MyCtrl'是否正确定义

有几种模式:

 app.controller('MyCtrl', ['$scope', function ($scope) {...}]) app.controller('MyCtrl', function ($scope) {...}) var MyCtrl = function ($scope) {...}) 
  1. 在正确的模块中定义了“MyCtrl”?
  2. “MyCtrl's”模块是否添加到应用程序依赖项
 angular.module('app', ['app.sources']); 
  1. 如果您多次定义您的模块,则应按以下顺序进行定义

    • 首先定义应该是这样的
 angular.module('app.sources', []); 

(用[ ]

  • 后续的定义应该是这样的
 angular.module('app.sources'); 

(没有[ ]

重要 :声明顺序很重要 – 用[ ]定义应该先去。

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

  2. 您的控制器的语法对于您的AngularJS版本是否正确

(Angular 1.0.x1.2.x之间的定义有所不同,Angular版本大于1.3.x ,你不能声明一个全局的构造函数,并将其与ng-controller一起使用)

如果您使用带“controller as”语法的ng-controller ,请务必检查控制器名称是否正确。

我的情况:

 //controller register angular.module("myApp").controller("someController", SomeController) //in my code <div ng-controller="SomeController as vm"></div> 

注意我使用了ng-controller="SomeController as vm" ,其中SomeController有一个大写SomeController S 应该用小写字母s因为这是我注册的方式。

所以,检查你的控制器名称是否正确。