Javascript 论点不是函数,未定义
我正在玩AngularJS,但我收到一条错误消息: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
参数“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
...
}]);
在小提琴的选项中,您选择执行javasctiptonLoad
。
使用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>
});