Angularjs:错误:参数'HomeController'不是一个函数,得到了undefined

这是我的演示使用angularjs,创build一个服务文件,并添加服务控制器。

我的演示有两个问题:

  • 一个是当我在<script src="MyService.js">之前放置<script src="HomeController.js">出现这个错误,

错误:[ng:areq]参数'HomeController'不是一个函数,没有定义

  • 另一个是当我在<script src="HomeController.js">之前放置<script src="MyService.js">出现以下错误,

错误:[$ injector:unpr]未知提供者:MyServiceProvider < – MyService

我的来源:

文件Index.html

 <!DOCTYPE html> <html > <head lang="en">…</head> <body ng-app="myApp"> … <div ng-controller="HomeController"> <div ng-repeat="item in hello">{{item.id + item.name}}</div> </div> <script src="Scripts/angular.js"></script> <script src="Scripts/angular-route.js"></script> <!-- App libs --> <script src="app/app.js"></script> <script src="app/services/MyService.js"></script> <script src="app/controllers/HomeController.js"></script> </body> </html> 

文件HomeController.js

 (function(angular){ 'use strict'; var myApp = angular.module('myApp',[]); myApp.controller('HomeController',function($scope,MyService){ $scope.hello=[]; $scope.hello = MyService.getHello(); }); })(window.angular); 

文件MyService.js

 (function(angular){ 'use strict'; var myApp = angular.module('myApp',[]); myApp.service('MyService', function () { var hello =[ {id:1,name:'cuong'}, {id:2,name:'nguyen'}]; this.getHello = function(){ return hello; }; }); })(window.angular); 

这将创build一个新的模块/应用程序:

 var myApp = angular.module('myApp',[]); 

虽然这访问了一个已经创build的模块(请注意省略第二个参数 ):

 var myApp = angular.module('myApp'); 

既然你在这两个脚本上使用第一种方法,你基本上覆盖了你之前创build的模块。

在加载的第二个脚本中,使用var myApp = angular.module('myApp');

我曾经遇到过这个错误。 我的问题是,我没有添加FILE_NAME_WHERE_IS_MY_FUNCTION.js

所以我的file.html从来没有find我的function在哪里

一旦我添加“file.js”我解决了这个问题

 <html ng-app='myApp'> <body ng-controller='TextController'> .... .... .... <script src="../file.js"></script> </body> </html> 

还要确保您的控制器在脚本标记内定义在index.html的底部,就在body的结束标记之前。

  <!-- build:js({.tmp,app}) scripts/scripts.js --> <script src="scripts/app.js"></script> <script src="scripts/controllers/main.js"></script> <script src="scripts/controllers/Administration.js"></script> <script src="scripts/controllers/Leaderboard.js"></script> <script src="scripts/controllers/Login.js"></script> <script src="scripts/controllers/registration.js"></script> 

提供的一切都拼写“正确”(相同)在你的specific.html,specific.js和app.js页面,这应该可以解决你的问题。

每当我想念注射和function列表之间的“,”几次发生在我身上

 app.controller('commonCtrl', ['$scope', '$filter',function($scope,$filter) { }]); 

我也遇到了这个错误,但在我的情况下,这是因为控制器的命名约定。 我声明controller: "QuestionController".state但在控制器的定义我宣布它

 yiiExamApp.controller('questionController' ... 

但应该是

 yiiExamApp.controller('QuestionController' ... 

希望能帮助面对这个错误的人们,因为这个愚蠢的错误,我浪费了4小时的时间来识别它。

我也遇到了这个相同的错误,对我的修复是包括我的孩子模块在主模块arrays。

 var myApp = angular.module('myApp', ['ngRoute', 'childModuleName']); 

如果ALL ELSE失败,你在MEAN堆栈上的本地运行就像我一样咕嘟咕嘟……停下来再次服务! 我拉着我的耳闻,仔细检查了你所有post里的所有内容,直到我简单地重新运行吞吐服务。

我得到了同样的错误。 我这样定义java脚本

 <script src="controllers/home.js" /> 

然后我改变了这个

 <script src="controllers/home.js"></script> 

在这之后,我的问题就解决了。

我也有这个错误。

我不得不把我的新控制器添加到路由信息。 \ SRC \ JS \ app.js

 angular.module('Lillan', [ 'ngRoute', 'mobile-angular-ui', 'Lillan.controllers.Main' ]) 

我添加了我的控制器,使其看起来像

 angular.module('Lillan', [ 'ngRoute', 'mobile-angular-ui', 'Lillan.controllers.Main', 'Lillan.controllers.Growth' ]) 

干杯!

很明显,以前的post是有用的,但以上任何一个都没有帮助我的情况。 原因是加载脚本的顺序错误 。 例如,在我的情况下,控制器editCtrl.js取决于(使用)ui-bootstrap-tpls.js,所以它应该先加载。 这导致了一个错误:

 <script src="scripts/app/station/editCtrl.js"></script> <script src="scripts/angular-ui/ui-bootstrap-tpls.js"></script> 

这是对的,作品:

 <script src="scripts/angular-ui/ui-bootstrap-tpls.js"></script> <script src="scripts/app/station/editCtrl.js"></script> 

所以,要解决这个错误,你需要首先声明所有没有依赖关系的脚本,然后声明依赖于之前声明的脚本。

尝试这个

  <title>My First Angular App</title> </head> <body> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> <h3>Adding Simple Controller<h3> <div ng-controller="SimpleController"> Name: <br/> <input type = "text" data-ng-model = "name"/> {{name}} <br/> <ul> <li data-ng-repeat = "cust in customers | filter:name | orderBy:'city'"> {{cust.name}} - {{cust.city}} </li> </ul> </div> <script> var angularApp = angular.module('angularApp',[]); angularApp.controller('SimpleController', [ '$scope', SimpleController]); function SimpleController($scope) { $scope.customers = [ {name:'Nikhil Mahirrao', city:'Pune'}, {name:'Kapil Mahire', city:'Pune'}, {name:'Narendra Mahirrao', city:'Phophare'}, {name:'Mithun More', city:'Shahada'} ]; } </script> </body> 

在我的情况下,我错过了HTML文件中的Angular应用程序的名称。 例如,我已经包含这个文件是我的应用程序代码的开始。 我曾以为这是在跑,但事实并非如此。

app.module.js

 (function () { 'use strict'; angular .module('app', [ // Other dependencies here... ]) ; })(); 

但是,当我宣布在HTML中的应用程序,我有这样的:

的index.html

 <html lang="en" ng-app> 

但是要用我使用的名字来引用Angular应用程序,我必须使用:

index.html(固定)

 <html lang="en" ng-app="app"> 

我得到了错误,因为我已经在脚本之前添加了控制器脚本,我在应用程序中定义了相应的模块。 首先添加脚本

 <script src = "(path of module.js file)"></script> 

然后只添加

 <script src = "(path of controller.js file)"></script> 

在主文件中。

我有类似的问题。 修正是确保您的ctrollers不仅在脚本标记中定义在index.html的底部,就在body的结束标记之前,而且还要validation它们是按照您的文件夹结构的顺序进行的。

 <script src="scripts/app.js"></script> <script src="scripts/controllers/main.js"></script> <script src="scripts/controllers/Administration.js"></script> <script src="scripts/controllers/Leaderboard.js"></script> <script src="scripts/controllers/Login.js"></script> <script src="scripts/controllers/registration.js"></script> 

我也在我的项目中遇到过这个问题。 在我用<script>标记将my-controller.js插入到我的karma.conf.js文件后,它终于奏效了。

希望这会有所帮助。 有很多原因可以导致这个问题。

是。 正如许多人之前指出的那样,我已经在index.html中的所有控制器文件中添加了srcpath。

 <script src="controllers/home.js"></script> <script src="controllers/detail.js"></script> <script src="controllers/login.js"></script> <script src="controllers/navbar.js"></script> <script src="controllers/signup.js"></script> 

我有同样的问题,但我忘了将文件包含在grunt / gulp最小化过程中。

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

希望有所帮助。

在我的情况下,当我没有在数组参数中声明函数时出现这个错误。

错误的那个:

 taskAppControllers.controller('MainMenuCtrl', []); 

固定的一个:

 taskAppControllers.controller('MainMenuCtrl', [function(){ }]); 

另外检查拼写错误

 var MyApp = angular.module('AppName',[]); MyApp.controller('WRONG_SPELLING_MyCtrl', ['$scope', MyControllerCtrl]) function MyControllerCtrl($scope) { var vm = $scope; vm.Apple = 'Android'; } <div ng-controller="ACTUAL_SPELLING_MyCtrl"> {{Apple}} </div> 

检查您的HTML页面是否包含:

  1. angular.min脚本
  2. app.js
  3. 控制器JavaScript页面

文件包含的顺序很重要。 这是我解决这个问题的方法。

希望这可以帮助。

 sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){ 

对我来说同样的事情,逗号','function之前帮助我解决问题 – 错误:ng:areq Bad Argument

错误:ng:areq Bad Argument得到了几次,因为我太快closures了方括号。 在下面的BAD示例中,在'$ state'之后,它实际上应该在最后一个括号之前被错误地closures。

坏:

 sampleApp.controller('sampleApp', ['$scope', '$state'], function($scope, $state){ }); 

好:

 sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){ }]);