我正在玩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
然后我在JavaScript中定义Controller
函数,由于某种原因没有注册。
function Controller($scope){
$scope.$watch("N", function(){ ... });}
答案 0 :(得分:12)
我有完全相同的错误:argument 'HelloCtrl' is not a function
,未定义。
事实证明我的hello.js
文件中存在语法错误...数组定义中缺少逗号HelloCtrl()
内。
我添加了逗号,然后一切都开始工作了!
希望这有帮助。
答案 1 :(得分:7)
我有同样的错误......参数'RadioController'不是函数......
我在HTML中引用了控制器错误。我有
data-ng-controller="RadioController"
应该是什么时候
data-ng-controller="Radio.RadioController"
('Radio'是Controller所在的模块)
答案 2 :(得分:5)
在你的小提琴选项中,你选择执行你的javasctipt onLoad
。
使用onLoad
选项,您的javascript会添加到window.onLoad
函数:
window.onload=function(){
function Controller($scope){
...
}
}
因此,angular无法访问您的代码,因为它位于闭包中。
使用no wrap
选项,您的代码会直接添加到页面中,并且可以通过角度JSFiddle访问。
您可以浏览来源以查看其工作原理。
答案 3 :(得分: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
...
}]);
答案 4 :(得分:4)
我也很难过。我的问题的原因是我有一个旧版本的Angular,它不支持新的as
别名。
确保您拥有支持as
的最新版Angular。
答案 5 :(得分:1)
您是否正确配置了$ controllerProvider?
使用当前$ controllerProvider注册的构造函数的名称或当前作用域上的表达式求值为构造函数。
通过将ng-controller =&#34;指定为propertyName&#34;,可以将控制器实例发布到范围属性中。
如果当前的$ controllerProvider配置为使用全局变量(通过 $ controllerProvider.allowGlobals()),这也可能是全局可访问的构造函数的名称(不推荐)。
答案 6 :(得分:1)
嗯,我成功地通过降级到传统角度JS(1.2.27)来解决这个错误。
用于定义控制器和角度JS(1.3.2)的相同语法(您已使用上述)是导致此错误的组合。
使用angular(1.3.2),以下语法对我有用。
var app = angular.module('dummyApp', []);
app.controller('helloController', function($scope){
<write statements here>
});
答案 7 :(得分:1)
无需降级到旧版本。 您可以同时使用 as 方法或 angular.module 方法。
加载文件的顺序也必须正确。
(如果您很难记住加载文件的顺序,请考虑使用js )
答案 8 :(得分:0)
我不得不重新订购脚本标签。我把控制器放在比它依赖的另一个更高的位置。
花了我几个小时,希望这有助于其他人
答案 9 :(得分:0)
我遇到了这个错误 - 我的控制器名称出错了。
它被注册为CallbacksController ...花了我五分钟的咒骂来发现案件差异(提示 - 在我的情况下是资本B!)。