Angularjs: Ошибка: [ng: areq] Аргумент "HomeController" не является функцией, получил undefined
Это мое демо, использующее angularjs, для создания служебного файла и добавления службы к контроллеру.
У меня две проблемы с моей демонстрацией:
- Один, когда я положил
<script src="HomeController.js">
до <script src="MyService.js">
, я получаю эту ошибку,
Ошибка: [ng: areq] Аргумент 'HomeController' не является функцией, получил undefined
- Другое, когда я помещал
<script src="MyService.js">
до <script src="HomeController.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);
Ответы
Ответ 1
Это создает новый модуль/приложение:
var myApp = angular.module('myApp',[]);
Пока он обращается к уже созданному модулю (замечает отсутствие второго аргумента):
var myApp = angular.module('myApp');
Поскольку вы используете первый подход для обоих сценариев, вы в основном переопределяете ранее созданный модуль.
При загрузке второго script используйте var myApp = angular.module('myApp');
.
Ответ 2
Я однажды испытал эту ошибку. Моя проблема заключалась в том, что я не добавлял FILE_NAME_WHERE_IS_MY_FUNCTION.js
поэтому мой file.html не нашел, где была моя функция
Как только я добавлю "file.js", я решил проблему
<html ng-app='myApp'>
<body ng-controller='TextController'>
....
....
....
<script src="../file.js"></script>
</body>
</html>
Ответ 3
Также убедитесь, что ваши контроллеры определены в тегах script в нижней части вашего index.html непосредственно перед закрывающим тегом для тела.
<!-- 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, это должно решить вашу проблему.
Ответ 4
Случилось несколько раз, когда я пропустил "," между списком инъекций и функцией
app.controller('commonCtrl', ['$scope', '$filter',function($scope,$filter) {
}]);
Ответ 5
Я также испытал эту ошибку, но в моем случае это было из-за соглашения об именах контроллеров. Я объявил controller: "QuestionController"
в .state
, но в определении контроллера я заявил, что он
yiiExamApp.controller('questionController' ...
но это должно быть
yiiExamApp.controller('questionController' ...
Надеюсь, что это поможет людям, столкнувшимся с этой ошибкой, из-за этой глупой ошибки, которую я потратил 4 часа на то, чтобы идентифицировать ее.
Ответ 6
Я также столкнулся с этой же ошибкой, и исправление для меня состояло в том, чтобы включить мой дочерний модуль в основной массив модулей.
var myApp = angular.module('myApp', ['ngRoute', 'childModuleName']);
Ответ 7
Если ALL ELSE терпит неудачу, и вы выполняете локально в стеке MEAN, как я, с помощью gulp... просто остановитесь и снова подайте! Я вытаскивал свой сигнал, тщательно проверяя все, начиная от всех ваших сообщений, до тех пор, пока я просто не запустил gulp.
Ответ 8
Я получил ту же ошибку. Я определил java script как этот
<script src="controllers/home.js" />
то я перешел на этот
<script src="controllers/home.js"></script>
После этого моя проблема решена.
Ответ 9
Я также получил эту ошибку.
Мне пришлось добавить новый контроллер для маршрутизации информации.
\ 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'
])
Ура!
Ответ 10
Очевидно, что предыдущие сообщения полезны, но любой из вышеперечисленных вопросов мне не поможет. Причина заключалась в неправильной последовательности загрузки скриптов. Например, в моем случае контроллер 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>
Итак, чтобы исправить ошибку, вам нужно сначала объявить все скрипты без зависимостей, а затем скрипты, которые зависят от ранее объявленных.
Ответ 11
Попробуйте это
<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>
Ответ 12
В моем случае у меня не было имени приложения Angular в html файле. Например, я включил этот файл в начало моего кода приложения. Я предположил, что это бежит, но это не так.
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">
Ответ 13
Я получал ошибку, потому что я добавил контроллер script перед script, где я определил соответствующий модуль в приложении.
Сначала добавьте script
<script src = "(path of module.js file)"></script>
Затем добавьте только
<script src = "(path of controller.js file)"></script>
В главном файле.
Ответ 14
У меня была аналогичная проблема. Исправление было гарантией того, что ваши ctrollers не только определены в тегах script в нижней части вашего index.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>
Ответ 15
Я также столкнулся с этой проблемой в своем проекте. В конечном итоге он работал после того, как я вставил my-controller.js
в мой karma.conf.js
файл с тегом <script>
.
Надеюсь, это поможет. Существует много причин, которые могут привести к этой проблеме.
Ответ 16
Да. Как уже отмечалось ранее,
Я добавил путь src ко всем файлам контроллера в index.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>
Ответ 17
У меня была та же проблема, но я забыл включить файл в процесс grunt/ gulp.
grunt.initConfig({
uglify: {
my_target: {
files: {
'dest/output.min.js': ['src/input1.js', 'src/missing_controller.js']
}
}
}
});
Надеюсь, что это поможет.
Ответ 18
В моей ситуации эта ошибка появилась, когда я не объявлял функцию внутри аргумента массива.
Тот, у кого ошибка:
taskAppControllers.controller('MainMenuCtrl', []);
Фиксированный:
taskAppControllers.controller('MainMenuCtrl', [function(){
}]);
Ответ 19
Также проверьте наличие орфографических ошибок.
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>
Ответ 20
Проверьте, содержит ли ваша HTML-страница:
-
angular.min
script
-
app.js
- Страница JavaScript-контроллера.
Важен порядок, в котором находятся файлы. Это было мое решение этой проблемы.
Надеюсь, что это поможет.
Ответ 21
sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){
То же самое для меня, запятая ',' перед тем, как функция помогла мне в устранении проблемы - Ошибка: ng: areq Бад-аргумент
Ответ 22
Ошибка: ng: areq Плохой аргумент получил пару раз, потому что я слишком быстро закрываю квадратную скобку. В приведенном ниже примере BAD он закрывается некорректно после "$ state", когда он действительно должен идти до конечного parenthese.
ПЛОХО:
sampleApp.controller('sampleApp', ['$scope', '$state'], function($scope, $state){
});
ХОРОШО:
sampleApp.controller('sampleApp', ['$scope', '$state', function($scope, $state){
}]);