如何find一个理由AngularJS“参数”MyCtrl“不是一个函数,得到了未定义的”
当AngularJS崩溃时出现错误“ 参数”MyCtrl“不是一个函数,得到了未定义 ”这可能是有点挑战find一个原因。
在这里我想做一个“检查清单”,你应该检查什么时候出现错误
- 与“MyCtrl”通过HTML连接的文件 ? (如果您连接或uglify您的文件检查两次)
<script src='path/to/controllers.js'></script>
- 'MyCtrl'是否正确定义 ?
有几种模式:
app.controller('MyCtrl', ['$scope', function ($scope) {...}]) app.controller('MyCtrl', function ($scope) {...}) var MyCtrl = function ($scope) {...})
- 在正确的模块中定义了“MyCtrl”?
- “MyCtrl's”模块是否添加到应用程序依赖项 ?
angular.module('app', ['app.sources']);
-
如果您多次定义您的模块,则应按以下顺序进行定义 :
- 首先定义应该是这样的
angular.module('app.sources', []);
(用[ ]
)
- 后续的定义应该是这样的
angular.module('app.sources');
(没有[ ]
)
重要 :声明顺序很重要 – 用[ ]
定义应该先去。
- 检查该模块只定义一次 。 您可能忘记在复制粘贴后重命名模块。 检查src的string
angular.module('app.sources', []);
-
检查你的
'ng-app'
。 最好只使用其中的一个名称,如ng-app='app'
(换句话说,不要定义多个未命名的ngApp指令) -
您的控制器的语法对于您的AngularJS版本是否正确 ?
(Angular 1.0.x和1.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
因为这是我注册的方式。
所以,检查你的控制器名称是否正确。