参数...不是函数,未定义

时间:2013-03-31 21:31:32

标签: javascript angularjs

我正在玩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(){  ... });}

10 个答案:

答案 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?

来自documentation

  

使用当前$ 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!)。