如何找到原因AngularJS"自变量'MyCtrl'不是一个函数,未定义”;

How to find a reason AngularJS "Argument 'MyCtrl' is not a function, got undefined"

本文关键字:函数 一个 未定义 MyCtrl 何找 AngularJS 自变量 quot      更新时间:2023-09-26

当AngularJS崩溃并出现错误"参数'MyCtrl'不是函数,未定义"时,要找到原因可能有点困难。

在这里,我想做一种"检查列表",当收到错误

时,你应该检查什么
  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"
  2. 是否将"MyCtrl"模块添加到应用程序依赖项
angular.module('app', ['app.sources']);
  1. 如果您多次定义模块,则应按以下顺序定义:

    • 第一个定义应该像
angular.module('app.sources', []);

(带有[ ]

  • 后续定义应类似
angular.module('app.sources');

(无[ ]

重要:申报顺序很重要-应首先使用[ ]进行定义。

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

  2. 控制器的语法是否适用于AngularJS版本

(Angular1.0.x1.2.x及更高版本中的定义存在差异。对于大于1.3.x

如果使用带有"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的大写字母为S。它应该是小写的s,因为我就是这样注册的

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