Используя AngularJS со Scala Play, я получаю эту ошибку.
Ошибка: аргумент MainCtrl не является функцией, получено значение undefined
Я пытаюсь создать таблицу, состоящую из дней недели.
Пожалуйста, взгляните на мой код. Я проверил имя контроллера, но это кажется правильным. Примечание: код, использованный в этом SO- ответе
index.scala.html
@(message: String)
@main("inTime") {
<!doctype html>
<html lang="en" ng-app>
<head>
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
</head>
<div ng-controller="MainCtrl">
<table border="1">
<tbody ng-repeat='(what,items) in data'>
<tr ng-repeat='item in items'>
<td ngm-if="$first" rowspan="{{items.length}}">{{what}}</td>
<td>{{item}}</td>
</tr>
</tbody>
</table>
</div>
</html>
}
MainCtrl.js
(function() {
angular.module('[myApp]', []).controller('MainCtrl', function($scope) {
$scope.data = {
Colors: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
}
});
}());
angularjs
playframework
Кевин Мередит
источник
источник
ng-app
можете ли вы изменить его наng-app=myApp
Ответы:
Удалите
[]
из имени ([myApp]) модуляИ добавьте
ng-app="myApp"
в html, и он должен работать.источник
[]
означает, что вы создаете новый модуль. Удаление второго параметра означает, что вы извлекаете существующий модуль. Таким образом, одна из возможностей проверить - это то, что вы звонитеangular.module
дважды, оба раза включая второй параметр. Если это так, то более позднее вхождение перезапишет второе, скрыв все определения контроллеров до этого момента.[]
он имеет в виду первый параметр, в котором OP[myApp]
вместоmyApp
. Он не говорит о втором параметре.ПЕРВЫЙ. проверьте правильность
controller
определений маршрута, таких же, как имена контроллеров, которые вы определяетеразные имена контроллеров в этом примере приведут к ошибкам, но этот пример правильный
ВТОРОЙ проверьте, импортировали ли вы свой файл javascript:
<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>
источник
index.html
У меня было такое же сообщение об ошибке (в моем случае: «Аргумент 'languageSelectorCtrl' не является функцией, получено не определено»).
После утомительного сравнения с исходным кодом Angular я обнаружил, что ранее удалил ссылку на модуль контроллеров в app.js. (найдите это на https://github.com/angular/angular-seed/blob/master/app/js/app.js )
Итак, у меня было это:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])
Это не удалось.
И когда я добавил недостающую ссылку:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])
Сообщение об ошибке исчезло, и Angular снова смог создать экземпляры контроллеров.
источник
Иногда эта ошибка является результатом двух
ng-app
директив, указанных в html. В моем случае по ошибке я указалng-app
в своемhtml
теге иng-app="myApp"
вbody
теге вот так:источник
Это серьезно заняло у меня 4 ЧАСА (включая бесконечные поиски на SO), но, наконец, я нашел его: по ошибке (непреднамеренно) я где-то добавил пробел.
Вы можете это заметить?
angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);
Итак ... 4 часа спустя я увидел, что должно быть:
angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);
Практически невозможно увидеть невооруженным глазом.
Это подчеркивает жизненно важную важность контроля версий (git или что-то еще) и модульного / регрессионного тестирования.
источник
Controller
вместо,controller
и это все, что потребовалось.Я столкнулся с той же проблемой, и в моем случае это произошло в результате этой проблемы:
У меня были контроллеры, определенные в отдельном модуле (называемом myApp.controllers) и введенные в основной модуль приложения (называемый myApp) следующим образом:
Коллега поместил другой модуль контроллера в отдельный файл, но с тем же именем, что и мое (например, «myApp.controllers»), что вызвало эту ошибку. Я думаю, потому что Angular запутался между этими модулями контроллера. Однако сообщение об ошибке не очень помогло определить, что происходит не так.
источник
В моем случае (имея страницу обзора и страницу «добавить») я получил это с помощью настройки маршрутизации, как показано ниже. Он выдавал сообщение для AddCtrl, которое не может быть введено ...
Из-за
when('/'
маршрута все мои маршруты попали в обзор, и контроллер не мог быть сопоставлен при рендеринге страницы маршрута / add. Это сбивало с толку, потому что я ДЕЙСТВИТЕЛЬНО видел шаблон add.html, но его контроллера нигде не было.Удаление '/' - маршрута, когда случай устранил эту проблему для меня.
источник
Если вы находитесь в подмодуле, не забудьте объявить модуль в основном приложении. то есть:
Если вы не объявите subModule1 в mainApp, вы получите «[ng: areq] Аргумент« MyController »не является функцией, получено значение undefined.
источник
Второй пункт Умеда был моей ловушкой, но для протокола, может, он кому-то где-то помогает:
У меня была та же проблема, и незадолго до того, как я сходил с ума, я обнаружил, что забыл включить свой скрипт контроллера.
Поскольку мое приложение основано на ASP.Net MVC, я решил сохранить рассудок, вставив следующий фрагмент в свой App_Start / BundleConfig.cs
и в Layout.cshtml
Теперь мне больше не придется думать о включении файлов вручную. Оглядываясь назад, я действительно должен был сделать это при настройке проекта ...
источник
Я получил нормальную ошибку с LoginController, которую я использовал в основном index.html. Я нашел два пути решения:
установив $ controllerProvider.allowGlobals (), я нашел этот комментарий в списке изменений Angular «Эта опция может быть удобна для переноса старых приложений, но, пожалуйста, не используйте ее в новых!» оригинальный комментарий к Angular
app.config (['$ controllerProvider', функция ($ controllerProvider) {$ controllerProvider.allowGlobals ();}]);
неправильный конструктор регистрирующего контроллера
перед
сейчас
'приложение' происходит из app.js
источник
У меня была такая же ошибка с большой ошибкой:
Ты видишь ? я забыл '' вокруг первой $ scope, правильный синтаксис, конечно же:
Первая ошибка, которую я не заметил сразу, была: « $ scope не определена », за которой следует « Ошибка: [ng: areq] Аргумент 'TreeEditStepControlsCtrl' не является функцией, получено значение не определено »
источник
Может ли это быть так же просто, как заключить ваш актив в "" и все, что требует кавычек внутри, с ""?
становится
Это могло вызвать некоторые проблемы с синтаксическим анализом
источник
Чтобы решить эту проблему, мне пришлось обнаружить, что я неправильно написал имя контроллера в объявлении маршрутов Angular:
источник
В моем случае это была простая опечатка
index.html
:это должно было быть
без лишних слов
s
в имени контроллера.источник
Оказывается, это кеш браузера, использующего здесь Chrome. Просто проверьте «Отключить кеш» в разделе «Проверить (элемент), решивший мою проблему».
источник
Потому что это всплывает в Google при попытке найти ответ на: «Ошибка: аргумент» не является функцией, получено значение undefined ».
Возможно, вы дважды пытаетесь создать один и тот же модуль.
Источник: https://docs.angularjs.org/api/ng/function/angular.module#overview
Пример:
angular.module('myApp', [])
Используется для создания модуля без внедрения каких-либо зависимостей.angular.module('myApp')
(Без аргумента) используется для получения существующего модуля.источник
Кажется, есть много рабочих решений, предполагающих, что ошибка имеет много реальных причин .
В моем случае я не объявил контроллер в
app/index.html
:Ошибка исчезла.
источник