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

joh*_*ual 15 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
Run Code Online (Sandbox Code Playgroud)

然后我Controller在JavaScript中定义函数,由于某种原因没有注册.

function Controller($scope){
$scope.$watch("N", function(){  ... });}
Run Code Online (Sandbox Code Playgroud)

小智 12

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

事实证明我的hello.js文件中存在语法错误...数组定义中缺少逗号,里面HelloCtrl().

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

希望这可以帮助.

  • 他所说的是"它可能在任何地方,没有任何东西,甚至是浏览器控制台,都不会告诉你在哪里".你只需要用精细的齿梳梳理你的男女同校.如果您记得最后一次更改,或者有一个可以与之比较的备份版本,它会有所帮助.我经常得到这个错误,对我而言,它总是由错误匹配的括号引起的.因人而异. (5认同)
  • 它没有,我们不知道逗号应该去哪里.请举个例子 (4认同)

use*_*545 7

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

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

data-ng-controller="RadioController"
Run Code Online (Sandbox Code Playgroud)

什么时候应该

 data-ng-controller="Radio.RadioController"
Run Code Online (Sandbox Code Playgroud)

('Radio'是Controller所在的模块)


Bas*_*dan 5

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

    window.onload=function(){
       function Controller($scope){
          ...
       }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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


gle*_*ebm 4

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

angular.module('myModule').controller('MyCtrl', function($scope) {
  $scope.$watch ....
});
Run Code Online (Sandbox Code Playgroud)

如果您希望代码在缩小后能够正常工作,则必须显式指定对 $scope 的依赖关系:

angular.module('myModule').controller('MyCtrl', ['$scope', function(s) { 
  // you can now name the $scope argument whatever you want
  ...
}]);
Run Code Online (Sandbox Code Playgroud)