Javascript 论点不是函数,未定义

Javascript 论点不是函数,未定义,javascript,angularjs,Javascript,Angularjs,我正在玩AngularJS,但我收到一条错误消息:参数“Controller”不是函数,未定义 <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"></di

我正在玩AngularJS,但我收到一条错误消息:
参数“Controller”不是函数,未定义

<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

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

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
  ...
}]);

在小提琴的选项中,您选择执行javasctipt
onLoad
。 使用
onLoad
选项,您的javascript将添加到
窗口中。onLoad
函数:

    window.onload=function(){
       function Controller($scope){
          ...
       }
    }
因此,angular无法访问您的代码,因为它位于闭包中

使用
no wrap
选项,您的代码将直接添加到页面中,并且可供用户访问:


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

我遇到了完全相同的错误:
参数“HelloCtrl”不是函数,未定义

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

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


希望这有帮助。

我也有同样的错误。。。参数“RadioController”不是函数

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

data-ng-controller="RadioController"
应该是什么时候

 data-ng-controller="Radio.RadioController"

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

我不得不重新订购脚本标签。我把控制器放得比它所依赖的另一个更高


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

我也很难做到这一点。问题的原因是我有一个Angular的旧版本,它不支持新的
as
别名


确保您拥有支持
的Angular的最新版本,因为

我有此错误-我的控制器名称中的大小写错误。


它已注册为CallbackController。。。我花了五分钟的时间发誓找出了案例的不同之处(提示-我的案例中大写B!)

您是否正确配置了$controllerProvider

从:

在当前$controllerProvider中注册的构造函数的名称,或在当前作用域上计算为构造函数的表达式的名称

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

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


我成功地解决了这个错误,降级到遗留的angular JS(1.2.27)

用于定义controller和angular JS(1.3.2)的相同语法(您在上面使用过)是导致此错误的组合

对于angular(1.3.2),下面的语法对我很有用

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

app.controller('helloController', function($scope){
    <write statements here>
});
var-app=angular.module('dummyApp',[]);
app.controller('helloController',函数($scope){
});

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

此外,加载文件的顺序必须正确


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

滑块应该控制细枝的复杂性,基本上是for循环中的值
N
。请解释您提到的
不换行
选项。这个答案缺少了一些上下文,这使得它不如它可能有用。只是澄清一下,
no wrap
选项在JSFIDLE中,而不是angular(您可以在左侧的控制栏中看到)。删除此项将删除导致OPs问题的关闭。关于闭包的更多信息:它没有,我们不知道逗号应该放在哪里。请举个例子,他说的是“它可能在任何地方,没有任何东西,甚至连浏览器控制台都不能告诉你在哪里”。你只要用细齿梳子检查一下你的女朋友就行了。如果您能记住上次更改的是什么,或者有一个可与之比较的备份版本,这会很有帮助。我经常遇到这个错误,对我来说,它总是由括号不匹配引起的。值得一提的是,我刚刚发现了我最近的一个类似错误,导致了数组问题。我不得不注释掉上半夜写的一大块代码&一点一点地取消注释。我有
myData.push(val:I)
而不是
$scope.myData.push({val:i});`-mssing
$scope`和缺少的大括号。当然,这意味着我的控制器不是一个函数;-)有一个简单的方法可以解决这个错误。对我来说没有任何区别。你可以通过以下清单找出你的问题:
var app = angular.module('dummyApp', []);

app.controller('helloController', function($scope){
    <write statements here>
});