如何找到原因 AngularJS“参数‘MyCtrl’不是函数,未定义”

IT技术 javascript angularjs
2021-01-26 02:14:32

当 AngularJS 因错误“ Argument 'MyCtrl' is not a function, got undefined ”而崩溃时,找到原因可能有点困难。

这里我想做一个“检查表”,出错时应该检查什么

2个回答
  1. 带有“MyCtrl”的文件是否通过 html 连接(如果您连接或丑化您的文件,请检查两次)
<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' 是否在正确的module中定义?
  2. “MyCtrl's”module是否添加到应用程序依赖项中
angular.module('app', ['app.sources']);
  1. 如果你定义module时间,您应该按以下顺序定义它

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

(与[ ]

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

(没有[ ]

重要:声明顺序很重要 -[ ]应该先定义

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

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

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

很难说为什么。可能是 chrome 缓存的东西?无论如何,firefox 提供比 chrome 更详细的错误。
2021-03-18 02:14:32
我检查了所有描述的步骤,包括module、控制器定义、优先级、index.html 中的附件等。该问题仅在 Firefox 中仍然存在。Chrome 在同一页面上没有显示错误。有什么问题?
2021-04-06 02:14:32
这节省了我的一天“使用高于 1.3.x 的 Angular,您不能声明全局构造函数并将其与 ng-controller 一起使用”,谢谢
2021-04-12 02:14:32

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

我的情况:

//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因为我就是这样注册的。

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