Me di cuenta de que la misma pregunta se hizo varias veces aquí, intenté resolverla pero nada ayuda.
Estoy siguiendo este tutorial con los videos de egghead.
Pero cuando llego a la sección de Controladores y Compartir datos entre controladores, no puedo hacer que funcione.
Cuando lo ejecuto con Chrome, aparece este error en la consola:
'El argumento' FirstCtrl 'no es una función, no está definido'.
Realmente no sé qué pasa. El código es el mismo del tutorial.
HTML
<!DOCTYPE html>
<html ng-app>
<head>
<title>AngularJS Tutorials: Controllers</title>
<link rel="stylesheet" href="mystyle.css">
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.min.js"></script>
</head>
<body>
<div ng-app="">
<div ng-controller="FirstCtrl">
<h1> {{data.message + " world"}}</h1>
<div class="{{data.message}}">
Wrap me in a foundation component
</div>
</div>
</div>
<script type="text/javascript" src="main.js"></script>
</body>
</html>
main.js
function FirstCtrl($scope){
$scope.data = { message: "Hello" };
}
javascript
angularjs
Pumba
fuente
fuente
Respuestas:
Tiene 2
ng-app
directivas sin nombre en su html.Pierde el de tu div.
Actualización
Intentemos un enfoque diferente.
Defina un módulo en su archivo js y asígnele la
ng-app
directiva. Después de eso, defina el controlador como un componente ng, no como una función simple:y la parte js:
Aquí hay una demostración en línea que está haciendo precisamente eso: http://jsfiddle.net/FssbL/1/
fuente
Recibí exactamente el mismo mensaje de error y, en mi caso, resultó que no enumeré el archivo JS del controlador (por ejemplo, first-ctrl.js) en mi index.html
fuente
Acabo de hacer este tutorial y seguí la respuesta de @ gion_13. Todavía no funcionó. Lo resolvió haciendo que el nombre de mi ng-app en el índice sea idéntico al de mi archivo js. Exactamente idéntico, incluso las comillas. Entonces:
y los js:
Es extraño cómo la ng-app tiene que ser idéntica pero el ng-controller no.
fuente
Debes nombrar tu
ng-app
, dando a tu aplicación un espacio de nombres; simplemente usarng-app
no es suficiente .En vez de:
En su lugar, necesitará algo como esto:
Entonces, así:
fuente
Otro bonito: redefinir módulos accidentalmente. Copié / pegué cosas un poco más temprano hoy y terminé teniendo una definición de módulo en alguna parte, que anulé con las definiciones de mi controlador:
Luego, en mis definiciones, se suponía que debía hacer referencia a él así:
Lo que hice en su lugar fue:
Tenga en cuenta el corchete adicional en la llamada a
angular.module
.fuente
eliminar ng-app = "" de
y simplemente hazlo
fuente
Yo también enfrenté el mismo problema. Pero el problema fue que olvidé incluir el módulo en la lista de módulos de los que depende la aplicación ng.
fuente
Me he enfrentado a este problema y lo solucioné de la siguiente manera:
primero elimine ng-app de:
agregue el nombre de ng-app a myApp:
agregue esta línea de código antes de la función:
aspecto final del guión:
fuente
En mi caso, este mensaje proviene de la inyección de dependencia olvidada en el módulo principal
fuente
Esto puede suceder si ha configurado mal Gulp para agregar el código de su aplicación angular más de una vez. En mi caso, esto estaba en index.js, y lo estaba agregando como parte del directorio de archivos js (globbed in gulp) antes y después de las declaraciones de mi controlador. Una vez que agregué una exclusión para que index.js no se minificara e inyectara la segunda vez, mi aplicación comenzó a funcionar. Otro consejo si alguna de las soluciones anteriores no resuelve su problema.
fuente
En primer lugar, si el nombre del módulo no está definido, en JS no podrá acceder al módulo y vincular el controlador a él.
Debe proporcionar el nombre del módulo al módulo angular. también hay una diferencia en el uso de definir módulo 1. angular.module ("firstModule", []) 2. angular.module ("firstModule")
1 - uno es declarar el nuevo módulo "firstModule" sin dependencia agregada en los segundos argumentos. 2 - Esto es para usar el "firstModule" que se inicializa en otro lugar y está usando tratando de obtener el módulo inicializado y hacerle modificaciones.
fuente
Me enfrenté a este problema, pero pude corregirlo cambiando el nombre del controlador, por favor pruébelo.
fuente
a veces, algo incorrecto en la sintaxis del código dentro de la función arroja este error. Verifique su función correctamente. En mi caso, sucedió cuando intentaba asignar campos Json con valores y estaba usando dos puntos: para hacer la asignación en lugar del signo igual = ...
fuente
Tenía dos controladores con el mismo nombre definidos en dos archivos javascript diferentes. Irritante que angular no puede dar un mensaje de error más claro que indique un conflicto de espacio de nombres.
fuente
No estoy seguro de este tutorial, pero tuve el mismo problema cuando olvidé incluir el archivo en el proceso de minimización de grunt / gulp.
Espero que ayude.
fuente
Mire también la carcasa de su carta. Pasé una buena hora persiguiendo este error.
mientras nombro el controlador
Todos deben tener un nombre coherente, en este caso Forgot p wdController con p minúscula.
fuente