Usando AngularJS con Scala Play, recibo este error.
Error: el argumento 'MainCtrl' no es una función, no está definido
Estoy intentando crear una tabla que consta de los días de la semana.
Por favor, eche un vistazo a mi código. Había comprobado el nombre del controlador, pero parece correcto. Nota: Código utilizado de esta respuesta 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
fuente
fuente
ng-app
puede cambiarlo ang-app=myApp
Respuestas:
Eliminar
[]
del nombre ([myApp]) del móduloY agregue
ng-app="myApp"
al html y debería funcionar.fuente
[]
indica que está creando un nuevo módulo. Eliminar el segundo parámetro indica que está recuperando un módulo existente. Por lo tanto, una posibilidad de verificar es si está llamandoangular.module
dos veces, ambas veces incluido el segundo parámetro. Si es así, la última aparición sobrescribirá la segunda, ocultando cualquier definición de controladores hasta ese momento.[]
se refiere al primer parámetro donde el OP tiene en[myApp]
lugar demyApp
. No está hablando del segundo parámetro.PRIMERO. Verifique si tiene correctas
controller
en las definiciones de ruta, igual que los nombres de controlador que está definiendodiferentes nombres de controlador en este ejemplo conducirán a errores, pero este ejemplo es correcto
SEGUNDO verifique si ha importado su archivo javascript:
<script src="modules/community/controllers/CommunityMembersCtrl.js"></script>
fuente
index.html
Tuve el mismo mensaje de error (en mi caso: "El argumento 'languageSelectorCtrl' no es una función, no está definido").
Después de una tediosa comparación con el código de Angular seed, descubrí que previamente había eliminado una referencia al módulo de controladores en app.js. (consúltelo en https://github.com/angular/angular-seed/blob/master/app/js/app.js )
Entonces tuve esto:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.directives'])
Esto falló.
Y cuando agregué la referencia que faltaba:
angular.module('MyApp', ['MyApp.filters', 'MyApp.services', 'MyApp.controllers', 'MyApp.directives'])
El mensaje de error desapareció y Angular pudo instanciar los controladores nuevamente.
fuente
Algunas veces este error es el resultado de dos
ng-app
directivas especificadas en el html. En mi caso, por error, lo había especificadong-app
en mihtml
etiqueta yng-app="myApp"
en labody
etiqueta de esta manera:fuente
Esto me tomó 4 HORAS en serio (incluyendo búsquedas interminables en SO) pero finalmente lo encontré: por error (sin querer) agregué un espacio en alguna parte.
¿Puedes distinguirlo?
angular.module('bwshopper.signup').controller('SignupCtrl ', SignupCtrl);
Entonces ... 4 horas después vi que debería ser:
angular.module('bwshopper.signup').controller('SignupCtrl', SignupCtrl);
Casi imposible de ver a simple vista.
Esto enfatiza la importancia vital del control de revisiones (git o lo que sea) y las pruebas de unidad / regresión.
fuente
Controller
lugar decontroller
y eso fue todo lo que necesité.Me he encontrado con el mismo problema y, en mi caso, estaba sucediendo como resultado de este problema:
Tenía los controladores definidos en un módulo separado (llamado 'myApp.controllers') y los inyecté en el módulo principal de la aplicación (llamado 'myApp') así:
Un colega empujó otro módulo de controlador en un archivo separado pero con el mismo nombre exacto que el mío (es decir, 'myApp.controllers') lo que causó este error. Creo que porque Angular se confundió entre esos módulos de controlador. Sin embargo, el mensaje de error no fue muy útil para descubrir qué estaba mal.
fuente
En mi caso (tener una página de descripción general y una página de "agregar") obtuve esto con mi configuración de enrutamiento como se muestra a continuación. Estaba dando el mensaje para AddCtrl que no se podía inyectar ...
Por el
when('/'
ruta, todas mis rutas fueron a la vista general y el controlador no pudo coincidir en la representación de la página / agregar ruta. Esto fue confuso porque vi la plantilla add.html pero su controlador no se encontraba por ninguna parte.Eliminar la ruta '/' cuando el caso solucionó este problema para mí.
fuente
Si está en un submódulo, no olvide declarar el módulo en la aplicación principal. es decir:
Si no declara subModule1 en mainApp, obtendrá un "[ng: areq] Argument" MyController "no es una función, no está definido.
fuente
El segundo punto de Уmed fue mi trampa, pero solo para que conste, tal vez esté ayudando a alguien en alguna parte:
Tuve el mismo problema y justo antes de volverme loco descubrí que me había olvidado de incluir mi script de controlador.
Como mi aplicación se basa en ASP.Net MVC, decidí mantenerme cuerdo insertando el siguiente fragmento en mi App_Start / BundleConfig.cs
y en Layout.cshtml
Ahora no tendré que pensar en incluir los archivos manualmente nunca más. En retrospectiva, debería haber hecho esto al configurar el proyecto ...
fuente
Recibí un error sano con LoginController, que usé en el index.html principal. Encontré dos formas de resolverlo:
configurando $ controllerProvider.allowGlobals (), encontré ese comentario en la lista de cambios Angular "esta opción podría ser útil para migrar aplicaciones antiguas, pero no la use en las nuevas". comentario original sobre Angular
app.config (['$ controllerProvider', function ($ controllerProvider) {$ controllerProvider.allowGlobals ();}]);
constructor incorrecto del controlador de registro
antes de
ahora
'app' proviene de app.js
fuente
Tuve el mismo error con un gran error:
Lo ves ? Olvidé el '' alrededor del primer $ scope, la sintaxis correcta es, por supuesto:
Un primer error que no vi inmediatamente fue: " $ scope no está definido ", seguido de " Error: [ng: areq] Argument 'TreeEditStepControlsCtrl' no es una función, no está definido "
fuente
¿Podría ser tan simple como incluir su activo en "" y lo que necesite citas en el interior con ''?
se convierte en
Eso podría estar causando algunos problemas al analizar
fuente
Para solucionar este problema, tuve que descubrir que escribí mal el nombre del controlador en la declaración de las rutas angulares:
fuente
En mi caso fue un simple error tipográfico en
index.html
:eso debería haber sido
sin el extra
s
en el nombre del controlador.fuente
Resulta que es la caché del navegador, usando Chrome aquí. Simplemente marque la casilla "Deshabilitar caché" en Inspeccionar (elemento) resolvió mi problema.
fuente
Porque esto aparece en Google cuando se intenta encontrar una respuesta a: "Error: Argumento '' no es una función, no está definido".
Es posible que esté intentando crear el mismo módulo dos veces.
Fuente: https://docs.angularjs.org/api/ng/function/angular.module#overview
Ejemplo:
angular.module('myApp', [])
Se utiliza para crear un módulo sin inyectar dependencias.angular.module('myApp')
(Sin argumento) se usa para obtener un módulo existente.fuente
Parece haber muchas soluciones que sugieren que el error tiene muchas causas reales .
En mi caso, no había declarado el controlador en
app/index.html
:Error desaparecido.
fuente