Estoy escribiendo una aplicación de muestra usando angularjs. Recibí un error mencionado a continuación en el navegador Chrome.
El error es
Error: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined
Que se presenta como
El argumento 'ContactController' no es una función, quedó indefinido
Código
<!DOCTYPE html>
<html ng-app>
<head>
<script src="../angular.min.js"></script>
<script type="text/javascript">
function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
</script>
</head>
<body>
<h1> modules sample </h1>
<div ng-controller="ContactController">
Email:<input type="text" ng-model="newcontact">
<button ng-click="add()">Add</button>
<h2> Contacts </h2>
<ul>
<li ng-repeat="contact in contacts"> {{contact}} </li>
</ul>
</div>
</body>
</html>
Recibí este problema porque había envuelto un archivo de definición de controlador en un cierre:
Pero había olvidado invocar ese cierre para ejecutar ese código de definición y decirle a Javascript que mi controlador existía. Es decir, lo anterior debe ser:
Tenga en cuenta el () al final.
fuente
Soy un principiante con Angular y cometí el error básico de no incluir el nombre de la aplicación en el elemento raíz angular. Entonces, cambiando el código de
a
trabajó para mi. @PSL, ya ha cubierto esto en su respuesta anterior.
fuente
Tuve este error porque no entendí la diferencia entre
angular.module('myApp', [])
yangular.module('myApp')
.Esto crea el módulo 'myApp' y sobrescribe cualquier módulo existente llamado 'myApp':
angular.module('myApp', [])
Esto recupera un módulo existente 'myApp':
angular.module('myApp')
Había estado sobrescribiendo mi módulo en otro archivo, usando la primera llamada anterior que creó otro módulo en lugar de recuperarlo como esperaba.
Más detalles aquí: https://docs.angularjs.org/guide/module
fuente
Acabo de migrar a angular 1.3.3 y descubrí que si tenía varios controladores en diferentes archivos cuando la aplicación se anula y perdí los primeros contenedores declarados.
No sé si es una buena práctica, pero tal vez pueda ser útil para otra.
fuente
Tuve este problema cuando accidentalmente volví a declarar
myApp
:Después del redeclare,
Controller1
deja de funcionar y genera el error OP.fuente
Realmente un excelente consejo, excepto que el MISMO error PUEDE ocurrir simplemente por faltar el script crítico que se incluye en su página raíz
ejemplo:
página: index.html
Desaparecido
Cuando se le dice a una ruta qué controlador y qué vista debe servir:
¡Tan esencial que el problema del controlador indefinido PUEDE ocurrir en este error accidental de ni siquiera hacer referencia al controlador!
fuente
Este error también puede ocurrir cuando tiene un proyecto grande con muchos módulos. Asegúrese de que la aplicación (módulo) utilizada en su archivo angular es la misma que utiliza en su plantilla, en este ejemplo " thisApp ".
app.js
index.html
fuente
Si todo lo demás falla y está usando Gulp o algo similar ... ¡simplemente vuelva a ejecutarlo!
Perdí 30 minutos cuádruple comprobando todo cuando todo lo que necesitaba era una patada rápida en los pantalones.
fuente
Si está utilizando rutas (alta probabilidad) y su configuración tiene una referencia a un controlador en un módulo que no se declara como dependencia, entonces la inicialización también puede fallar.
Por ejemplo, suponiendo que haya configurado ngRoute para su aplicación, como
Tenga cuidado en el bloque que declara las rutas,
Declarar
secondModule
como dependencia después de 'ngRoute' debería resolver el problema. Sé que tuve este problema.fuente
Recibí este error porque estaba usando una versión anterior de angular que no era compatible con mi código.
fuente
Estos errores ocurrieron, en mi caso, precedidos por errores de sintaxis en la función list.find (); El método 'find' de una lista no reconocida por IE11, por lo que debe reemplazarse por el método Filter, que funciona tanto para IE11 como para Chrome. consulte https://github.com/flrs/visavail/issues/19
fuente
Este error, en mi caso, precedido por un error de sintaxis en el método find de una lista en IE11. reemplazado método de búsqueda por método de filtro como se sugiere https://github.com/flrs/visavail/issues/19
entonces el controlador anterior no definió el error resuelto.
fuente
Obtuve el mismo error al seguir un tutorial anterior con (no lo suficientemente viejo) AngularJS 1.4.3. Con mucho, la solución más simple es editar la fuente angular.js de
a
y solo siga el tutorial tal cual, y las funciones globales obsoletas solo funcionan como controladores.
fuente
angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);