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页面是否包含:
-
angular.min
脚本 -
app.js
- 控制器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){ }]);