Angularjs: 错误: [ng:areq] 参数 'HomeController' 不是一个函数,未定义
Angularjs: Error: [ng:areq] Argument 'HomeController' is not a function, got undefined
这是我使用 angularjs 的演示,用于创建服务文件并向控制器添加服务。
我的演示有两个问题:
- 一个是当我把
<script src="HomeController.js">
放在<script src="MyService.js">
之前时,我得到这个错误,
错误:[ng:areq] 参数"HomeController"不是一个函数,未定义
- 另一个是当我把
<script src="MyService.js">
放在<script src="HomeController.js">
之前时,我得到以下错误,
错误: [$injector:unpr] 未知提供程序: 我的服务提供程序 <- 我的服务
我的来源:
文件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);
这将创建一个新的模块/应用程序:
var myApp = angular.module('myApp',[]);
虽然这会访问一个已经创建的模块(注意第二个参数的省略(:
var myApp = angular.module('myApp');
由于您在两个脚本上使用第一种方法,因此基本上覆盖了之前创建的模块。
在正在加载的第二个脚本上,使用 var myApp = angular.module('myApp');
。
我曾经遇到过这个错误。我的问题是我没有添加FILE_NAME_WHERE_IS_MY_FUNCTION.js
所以我的文件.html从未找到我的函数在哪里
添加"文件.js后,我解决了问题
<html ng-app='myApp'>
<body ng-controller='TextController'>
....
....
....
<script src="../file.js"></script>
</body>
</html>
还要确保控制器在索引底部的脚本标记中定义.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>
只要您的特定.html、特定和应用程序页面上的所有内容都拼写"正确"(相同.js.js这应该可以解决您的问题。
每当我在注射列表和功能之间错过","时都会发生在我身上几次
app.controller('commonCtrl', ['$scope', '$filter',function($scope,$filter) {
}]);
我也遇到了这个错误,但就我而言,这是因为控制器命名约定。我在 .state
中声明了controller: "QuestionController"
,但在控制器定义中我声明了它
yiiExamApp.controller('questionController' ...
但它应该是
yiiExamApp.controller('QuestionController' ...
希望这对面临此错误的人有所帮助,因为这个愚蠢的错误我浪费了 4 个小时来识别它。
我也遇到了同样的错误,我的解决方法是将我的子模块包含在主模块数组中。
var myApp = angular.module('myApp', ['ngRoute', 'childModuleName']);
如果所有其他方法都失败了,并且您像我一样在 MEAN 堆栈上本地运行......停下来再上菜吧!我正在仔细检查您所有帖子中的所有内容,但无济于事,直到我只是重新运行大口大口的服务。
我遇到了同样的错误。我像这样定义java脚本
<script src="controllers/home.js" />
然后我改成了这个
<script src="controllers/home.js"></script>
在此之后,我的问题就解决了。
我有类似的问题。修复方法是确保您的 ctroller 不仅在索引底部的脚本标签中定义.html就在正文的结束标签之前,而且还验证它们是否按照文件夹结构的顺序排列。
<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>
我在项目中也遇到了这个问题。在我将my-controller.js
插入我的karma.conf.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'
])
干杯!
显然,以前的帖子很有用,但以上任何一篇文章对我都没有帮助。原因是加载脚本的顺序错误。例如,在我的例子中,控制器 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 中声明应用程序时,我有这个:
索引.html
<html lang="en" ng-app>
但是要用我使用的名称引用 Angular 应用程序,我必须使用:
索引.html(固定(
<html lang="en" ng-app="app">
我收到错误,因为我在脚本之前添加了控制器脚本,我在应用程序中定义了相应的模块。首先添加脚本
<script src = "(path of module.js file)"></script>
然后只添加
<script src = "(path of controller.js file)"></script>
在主文件中。
错误:ng:areq 糟糕的论点已经让我得到了几次,因为我过早地关闭了方括号。 在下面的 BAD 示例中,它在"$state"之后被错误地关闭,而实际上它应该在最后一个括号之前。
坏:
sampleApp.controller('sampleApp', ['$scope', '$state'], function($scope, $state){
});
好:
sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){
}]);
<</div>
div class="answers"> 是的。正如许多人先前指出的那样,我已将 src 路径添加到索引中的所有控制器文件.html。
<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.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){
对我来说同样的事情,逗号','在函数帮助我解决问题之前 - 错误:ng:areq 糟糕的论点
我的控制器文件缓存为空。清除缓存为我修复了它。
我不小心将我的HomeController.js直接移出了预期的地方。再次将其放在原始位置。
之后,我的网站开始每秒自动加载页面,我什至无法查看错误。所以我清除了浏览器缓存。它解决了问题
,解决方案是在我的HomeController中声明的函数之一之后添加一个分号.js
//Corrected code is :
app.controller('HomeController', function($scope, $http, $log) {
$scope.demo1 = function(){
console.log("In demo");
} //Here i forgot to add the semicolon
$scope.demo2 = function(){
console.log("In demo");
};
});
- 变量转换为另一个“未定义”的变量
- getDataAsJSON()在PHP中是一个未定义的函数,但许多解释如何使用JSONP的网站都说要使用它
- 所以这是说我的法定对象中有一个未定义的变量
- 为什么在这个数组的末尾会有一个未定义的
- 为什么我得到一个未定义的回报
- Router.use()需要中间件函数,但得到了一个未定义的函数
- 使用jQuery'在数组中循环;s中的每一个都会在生成字符串时在开头产生一个未定义的值
- 如果定义了值,为什么会得到一个未定义的值?使用 eval()
- 无论如何,在Visual Studio智能感知中定义一个未定义的对象
- 角度过滤器分组依据过滤器返回一个“未定义”字段
- 如果我在 Filter() 函数中使用索引,我会得到一个未定义的引用错误吗?
- 另一个未定义的JavaScript问题
- 我得到一个未定义而不是文件名
- 为什么我的 push() 方法不断在我的数组中插入一个“未定义”的元素
- addEventListener 使用 for 循环给了我一个未定义的结果
- Promise.all 在完成之前返回一个未定义和解析的数组
- Angular JS给出了一个未定义的函数错误
- 我得到一个未定义的索引
- JS说我有一个未定义的对象.真的需要一些帮助来解决这个问题吗
- Ajax 调用给了我一个未定义 - 未定义的错误