Usando o AngularJS com o Scala Play, estou recebendo esse erro.
Erro: o argumento 'MainCtrl' não é uma função, foi indefinido
Estou tentando criar uma tabela composta pelos dias da semana.
Por favor, dê uma olhada no meu código. Eu verifiquei o nome do controlador, mas isso parece correto. Nota: Código usado nesta resposta do 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
Kevin Meredith
fonte
fonte
ng-app
você pode alterá-lo parang-app=myApp
Respostas:
Remova o
[]
do nome ([myApp]) do móduloE adicione
ng-app="myApp"
ao html e deve funcionar.fonte
[]
indica que você está criando um novo módulo. A remoção do segundo parâmetro indica que você está recuperando um módulo existente. Portanto, uma possibilidade de verificar é se você está chamandoangular.module
duas vezes, incluindo o segundo parâmetro. Nesse caso, a ocorrência posterior substituirá a segunda, ocultando quaisquer definições de controladores até esse ponto.[]
que ele está se referindo ao primeiro parâmetro onde o OP tem[myApp]
em vez demyApp
. Ele não está falando sobre o segundo parâmetro.PRIMEIRO. verifique se você está correto
controller
nas definições de rota, o mesmo que os nomes dos controladores que você está definindonomes de controladores diferentes neste exemplo levarão a erros, mas este exemplo está correto
SEGUNDO, verifique se você importou seu arquivo javascript:
<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>
fonte
index.html
Eu tive a mesma mensagem de erro (no meu caso: "O argumento 'languageSelectorCtrl' não é uma função, ficou indefinido").
Após uma comparação tediosa com o código da semente Angular, descobri que havia anteriormente removido uma referência ao módulo de controladores no app.js. (localize-o em https://github.com/angular/angular-seed/blob/master/app/js/app.js )
Então eu tive isso:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])
Isso falhou.
E quando adicionei a referência ausente:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])
A mensagem de erro desapareceu e o Angular pode instanciar os controladores novamente.
fonte
Algumas vezes, esse erro é resultado de duas
ng-app
diretivas especificadas no html. No meu caso, por engano, eu especifiqueing-app
na minhahtml
tag eng-app="myApp"
nabody
tag assim:fonte
Isso levou-me a sério 4 HORAS (incluindo pesquisas intermináveis no SO), mas finalmente encontrei: por engano (sem querer), adicionei um espaço em algum lugar.
Você consegue identificar?
angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);
Então ... 4 horas depois, vi que deveria ser:
angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);
Quase impossível de ver apenas a olho nu.
Isso enfatiza a importância vital do controle de revisão (git ou qualquer outra coisa) e dos testes de unidade / regressão.
fonte
Controller
vez dissocontroller
e foi tudo o que foi preciso.Eu encontrei o mesmo problema e, no meu caso, estava acontecendo como resultado desse problema:
Eu tinha os controladores definidos em um módulo separado (chamado 'myApp.controllers') e injetado no módulo principal do aplicativo (chamado 'myApp') assim:
Um colega enviou outro módulo do controlador em um arquivo separado, mas com exatamente o mesmo nome que o meu (por exemplo, 'myApp.controllers') que causou esse erro. Eu acho que porque o Angular ficou confuso entre esses módulos do controlador. No entanto, a mensagem de erro não foi muito útil para descobrir o que está acontecendo de errado.
fonte
No meu caso (com uma página de visão geral e uma página "adicionar"), compreendi isso com minha configuração de roteamento, como abaixo. Estava dando a mensagem para o AddCtrl que não pôde ser injetado ...
Por causa da
when('/'
rota, todas as minhas rotas foram para a visão geral e o controlador não pôde ser correspondido na renderização de página de rota / add. Isso foi confuso porque eu vi o modelo add.html, mas seu controlador não estava em lugar nenhum.A remoção da rota '/' - quando o caso corrigiu esse problema para mim.
fonte
Se você estiver em um submódulo, não se esqueça de declarar o módulo no aplicativo principal. ou seja:
Se você não declarar subModule1 no mainApp, receberá um argumento "[ng: areq]" MyController "não é uma função, ficará indefinido.
fonte
O segundo ponto de Уmed foi minha armadilha, mas apenas para constar, talvez esteja ajudando alguém em algum lugar:
Eu tinha o mesmo problema e, pouco antes de enlouquecer, descobri que havia esquecido de incluir meu script de controlador.
Como meu aplicativo é baseado no ASP.Net MVC, decidi me manter saudável, inserindo o seguinte trecho no meu App_Start / BundleConfig.cs
e no Layout.cshtml
Agora não precisarei pensar em incluir os arquivos manualmente novamente. Em retrospectiva, eu realmente deveria ter feito isso ao configurar o projeto ...
fonte
Eu obtive um erro sensato com o LoginController, que usei no principal index.html. Encontrei duas maneiras de resolver:
definindo $ controllerProvider.allowGlobals (), descobri que, na lista de alterações angular , "essa opção pode ser útil para a migração de aplicativos antigos, mas não use em novos!" comentário original sobre Angular
app.config (['$ controllerProvider', função ($ controllerProvider) {$ controllerProvider.allowGlobals ();}]);
contratador errado do controlador de registro
antes
agora
'app' vem de app.js
fonte
Eu tive o mesmo erro com um grande erro:
Entende ? esqueci o '' em torno do primeiro escopo $, a sintaxe correta é claro:
Um primeiro erro que não vi imediatamente foi: " $ scope is not defined ", seguido por " Error: [ng: areq] O argumento 'TreeEditStepControlsCtrl' não é uma função, ficou indefinido "
fonte
Poderia ser tão simples quanto colocar seu ativo em "" e o que precisar de aspas por dentro com ''?
torna-se
Isso pode estar causando alguns problemas com a análise
fonte
Para corrigir esse problema, tive que descobrir que escrevia incorretamente o nome do controlador na declaração de rotas angulares:
fonte
No meu caso, foi um erro de digitação simples em
index.html
:isso deveria ter sido
sem o extra
s
no nome do controlador.fonte
Acontece que é o cache do navegador, usando o Chrome aqui. Basta verificar o "Desativar cache" em Inspecionar (elemento) resolvido meu problema.
fonte
Porque isso aparece no Google ao tentar encontrar uma resposta para: "Erro: argumento '' não é uma função, ficou indefinido".
É possível que você esteja tentando criar o mesmo módulo duas vezes.
Fonte: https://docs.angularjs.org/api/ng/function/angular.module#overview
Exemplo:
angular.module('myApp', [])
É usado para criar um módulo sem injetar nenhuma dependência.angular.module('myApp')
(Sem argumento) é usado para obter um módulo existente.fonte
Parece haver muitas soluções de trabalho sugerindo que o erro tem muitas causas reais .
No meu caso, não havia declarado o controlador em
app/index.html
:Erro desaparecido.
fonte