我正在使用angularjs编写一个示例应用程序。我在chrome浏览器上遇到了下面提到的一个错误。
错误是
错误:ng:areq
,它将呈现为
参数“ContactController”不是函数,未定义
代码
<!DOCTYPE html>
<html ng-app>
<head>
<script src="../angular.min.js"></script>
<script type="text/javascript">
function ContactController($scope) {
$scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
</script>
</head>
<body>
<h1> modules sample </h1>
<div ng-controller="ContactController">
Email:<input type="text" ng-model="newcontact">
<button ng-click="add()">Add</button>
<h2> Contacts </h2>
<ul>
<li ng-repeat="contact in contacts"> {{contact}} </li>
</ul>
</div>
</body>
</html>
发布于 2014-08-04 12:51:04
使用Angular 1.3+,您不能再在全局作用域上使用全局控制器声明(没有显式注册)。您需要使用module.controller
语法注册控制器。
示例:-
angular.module('app', [])
.controller('ContactController', ['$scope', function ContactController($scope) {
$scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}]);
或
function ContactController($scope) {
$scope.contacts = ["abcd@gmail.com", "abcd@yahoo.co.in"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);
这是一个突破性的变化,但它can be turned off to use globals by using allowGlobals
。
示例:-
angular.module('app')
.config(['$controllerProvider', function($controllerProvider) {
$controllerProvider.allowGlobals();
}]);
这是来自Angular源码的评论:
如果通过$controllerProvider
$controllerProvider
window
对象(而不是recommended)
)上的window[constructor]
.....
expression = controllers.hasOwnProperty(constructor)
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
一些额外的检查:
ng-app
指令放在你的角度根元素上(例如:- html
)。示例:- ng-app="myApp"angular.module('app',[]).controller(..
,然后在另一个位置再次定义angular.module('app',[]).service(..
(当然包括两个脚本)会导致在模块app
上先前注册的控制器在第二次重新创建模块时被清除。发布于 2015-06-23 14:23:58
我遇到这个问题是因为我把一个控制器定义文件包装在一个闭包中:
(function() {
...stuff...
});
但我忘记了实际调用该闭包来执行该定义代码,并实际告诉Javascript我的控制器存在。也就是说,以上内容需要:
(function() {
...stuff...
})();
请注意末尾的()。
发布于 2015-10-16 17:23:29
我是Angular的初学者,我犯了一个基本的错误,就是没有在angular的根元素中包含应用程序的名称。因此,将代码从
<html data-ng-app>
至
<html data-ng-app="myApp">
对我很管用。@PSL,已经在上面的回答中涵盖了这一点。
https://stackoverflow.com/questions/25111831
复制相似问题