15

我正在使用 AngularJS,但收到一条错误消息:Argument 'Controller' is not a function, got undefined这是JSFiddle和 HTML 代码:

<h2>Hata's Tree-Like Set</h2>
<div ng-app ng-init="N=3;" ng-controller="Controller">
<input type="range" min="1" max="10" step="1" ng-model="N">  
<div class="tree"></div>
</div

然后我Controller在 JavaScript 中定义了这个函数,由于某种原因它没有注册。

function Controller($scope){
$scope.$watch("N", function(){  ... });}
4

10 回答 10

12

我有完全相同的错误:argument 'HelloCtrl' is not a function,未定义。

原来我的hello.js文件中有语法错误...数组定义中缺少逗号,在HelloCtrl().

我添加了逗号,然后一切都开始工作了!

希望这可以帮助。

于 2013-08-07T23:26:31.493 回答
7

我有同样的错误......参数'RadioController'不是一个函数......

我在 HTML 中引用了错误的控制器。我有

data-ng-controller="RadioController"

应该是什么时候

 data-ng-controller="Radio.RadioController"

('Radio' 是控制器所在的模块)

于 2014-01-28T11:50:29.043 回答
5

在您的小提琴选项中,您选择执行您的 javastipt onLoad。使用该onLoad选项,您的 javascript 将添加到window.onLoad函数中:

    window.onload=function(){
       function Controller($scope){
          ...
       }
    }

因此 Angular 无法访问您的代码,因为它位于闭包中。

使用该no wrap选项,您的代码将直接添加到页面中,并且可以通过 angular 访问:JSFiddle

您可以浏览源代码以查看其工作原理。

于 2013-03-31T22:13:31.893 回答
4

您可以定义一个控制器并在一个步骤中注册它:

angular.module('myModule').controller('MyCtrl', function($scope) {
  $scope.$watch ....
});

如果您希望代码在缩小后正常工作,则必须明确指定对 $scope 的依赖:

angular.module('myModule').controller('MyCtrl', ['$scope', function(s) { 
  // you can now name the $scope argument whatever you want
  ...
}]);
于 2013-03-31T21:35:01.333 回答
4

我也很难过。我的问题的原因是我有一个不支持新as别名的旧版本的 Angular。

确保您拥有支持as.

于 2014-08-04T01:26:09.290 回答
1

您是否正确配置了 $controllerProvider ?

文档中:

使用当前 $controllerProvider 注册的构造函数的名称或在当前范围内计算为构造函数的表达式。

控制器实例可以通过指定 ng-controller="as propertyName" 发布到范围属性中。

如果当前 $controllerProvider 配置为使用全局变量(通过$controllerProvider.allowGlobals()),这也可能是全局可访问的构造函数的名称(不推荐)。

于 2014-09-05T13:06:41.413 回答
1

Well, I succeeded in solving this error by downgrading to legacy angular JS (1.2.27).

The same syntax (you have used above) for defining controller and angular JS (1.3.2) is the combination which caused this error.

With angular (1.3.2), following syntax worked for me.

var app = angular.module('dummyApp', []);

app.controller('helloController', function($scope){
    <write statements here>
});
于 2014-11-23T13:16:50.147 回答
1

无需降级到旧版本。您可以同时使用as方法或angular.module方法。

加载文件的顺序也必须正确。

如果您很难记住加载文件的顺序,请考虑 require js

于 2014-11-24T11:06:15.330 回答
0

我不得不重新排序脚本标签。我把控制器放在高于它所依赖的另一个控制器上。

花了我几个小时,希望这对其他人有帮助

于 2014-07-26T15:31:24.287 回答
0

我遇到了这个错误 - 我以我的控制器的名义弄错了案例。

它被注册为 CallbacksController... 我花了五分钟的时间发誓发现大小写差异(提示 - 在我的情况下大写 B!)。

于 2014-09-05T12:58:42.793 回答