AngularJS错误:'参数'FirstCtrl'不是一个函数,得到未定义'

我注意到同样的问题在这里被问了几次,我试图解决它,但没有任何帮助。

我正在跟着这个教程与eggheadvideo。

但是,当我在控制器和控制器之间共享数据的部分,我不能得到它的工作。

当我用Chrome运行它时,在控制台中出现这个错误:

'参数'FirstCtrl'不是一个函数,没有定义'。

我真的不知道什么是错的。 代码与本教程中的代码相同。

这里是我有的HTML代码:

<!DOCTYPE html> <html ng-app> <head> <title>AngularJS Tutorials: Controllers</title> <link rel="stylesheet" href="mystyle.css"> <script src="http://code.angularjs.org/1.2.0-rc.2/angular.min.js"></script> </head> <body> <div ng-app=""> <div ng-controller="FirstCtrl"> <h1> {{data.message + " world"}}</h1> <div class="{{data.message}}"> Wrap me in a foundation component </div> </div> </div> <script type="text/javascript" src="main.js"></script> </body> </html> 

这里是main.js的代码:

 function FirstCtrl($scope){ $scope.data = {message: "Hello"}; } 

你的html中有2个未命名的ng-app指令。
失去你的分区之一。

更新
让我们尝试一种不同的方法。
在你的js文件中定义一个模块,并为其分配ng-app指令。 之后,将控制器定义为一个ng组件,而不是一个简单的函数:

 <div ng-app="myAppName"> <!-- or what's the root node of your angular app --> 

和js部分:

 angular.module('myAppName', []) .controller('FirstCtrl', function($scope) { $scope.data = {message: 'Hello'}; }); 

这是一个在线演示,只是这样做: http : //jsfiddle.net/FssbL/1/

我得到完全相同的错误消息,在我的情况下,事实certificate,我没有列出控制器JS文件(例如first-ctrl.js)在我的index.html

我只是做了这个教程,然后@ gion_13答案。 仍然没有工作。 通过在索引中使我的ng-app名称与我的js文件中的名称相同来解决这个问题。 完全相同,甚至是引号。 所以:

 <div ng-app="myapp"> <div ng-controller="FirstCtrl"> 

和js:

  angular.module("myapp", []) .controller('FirstCtrl',function($scope) { $scope.data= {message:"hello"}; }); 

奇怪的ng-app应该是相同的,但是ng-controller却不一样。

必须命名你的ng-app ,给你的应用程序一个命名空间; 简单地使用ng-app 是不够的

代替:

 <html ng-app> ... 

你将需要这样的东西,而不是:

 <html ng-app="app"> ... 

然后,像这样:

 var app = angular.module("app", []).controller("ActionsController", function($scope){}); 

另一个不错的:无意中重新定义模块。 我今天早些时候热切地复制/粘贴了一些东西,最后在某个地方有了一个模块定义,我用我的控制器定义覆盖了它:

 // controllers.js - dependencies in one place, perfectly fine angular.module('my.controllers', [/* dependencies */]); 

那么在我的定义中,我应该这样来引用它:

 // SomeCtrl.js - grab the module, add the controller angular.module('my.controllers') .controller('SomeCtrl', function() { /* ... */ }); 

所做的是:

 // Do not try this at home! // SomeCtrl.js angular.module('my.controllers', []) // <-- redefined module, no harm done yet .controller('SomeCtrl', function() { /* ... */ }); // SomeOtherCtrl.js angular.module('my.controllers', []) // <-- redefined module - SomeCtrl no longer accessible .controller('SomeOtherCtrl', function() { /* ... */ }); 

注意angular.module调用中的额外括号。

从中删除ng-app =“”

 <div ng-app=""> 

并简单地做到这一点

 <div> 

我也面临同样的问题。 但问题是我忘了列出模块列表的ng-app依赖。

我遇到了这个问题,并用以下方法修复:

  1. 首先从以下位置删除ng-app:

     <html ng-app> 
  2. 将ng-app的名称添加到myApp:

     <div ng-app="myApp"> 
  3. 在函数之前添加这行代码:

     angular.module('myApp', []).controller('FirstCtrl',FirstCtrl); 

脚本的最后看看:

 angular.module('myApp', []).controller('FirstCtrl',FirstCtrl); function FirstCtrl($scope){ $scope.data = {message: "Hello"}; } 

在我的情况下,这个消息来自主模块中被遗忘的dependency injection

如果你错误地configuration了多次添加angular度的应用程序代码,就会发生这种情况。 在我的情况下,这是在index.js,它是作为我的控制器声明之前和之后的js文件的目录(gulp中的globbed)的一部分添加它。 一旦我添加一个排除index.js不被缩小和第二次注入,我的应用程序开始工作。 另一个提示,如果上述任何解决scheme不能解决您的问题。

我面临这个问题,但我能通过重命名控制器来纠正这个问题,请尝试一下。

 ctrlSub.execSummaryDocuments = function(){}; 

有时在函数内部的代码的语法错误会引发这个错误。 检查你的function是否正确 在我的情况下,当我试图分配值的JSON字段,并使用冒号时发生的:作出分配,而不是等号= …

我有两个控制器在两个不同的JavaScript文件中定义相同的名称。 激怒angular度不能给出一个更清晰的错误消息,指出命名空间冲突。

我不确定这个教程,但是当我忘记将文件包含到grunt / gulp最小化过程中时,我遇到了同样的问题。

 grunt.initConfig({ uglify: { my_target: { files: { 'dest/output.min.js': ['src/input1.js', 'src/missing_controller.js'] } } } }); 

希望有所帮助。

看你的信箱。 我花了一个小时追赶这个bug。

 <section id="forgotpwd" ng-controller="ForgotPwdController"> 

而我命名的控制器

 angular .module('app') .controller('ForgotpwdController', ForgotpwdController); 

他们都应该一致地命名,在这种情况下,忘记p wdController小写字母。