Estou escrevendo um aplicativo de exemplo usando angularjs. Eu recebi um erro mencionado abaixo no navegador Chrome.
O erro é
Erro: [ng: areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined
O que renderiza como
O argumento 'ContactController' não é uma função, ficou 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>
Eu obtive esse problema porque envolvi um arquivo de definição de controlador em um fechamento:
Mas eu tinha esquecido de realmente invocar esse fechamento para executar esse código de definição e realmente dizer ao Javascript que meu controlador existia. Ou seja, o acima precisa ser:
Observe o () no final.
fonte
Sou iniciante no Angular e cometi o erro básico de não incluir o nome do aplicativo no elemento raiz angular. Então, alterando o código de
para
trabalhou para mim. O @PSL já cobriu isso em sua resposta acima.
fonte
Eu tive esse erro porque não entendi a diferença entre
angular.module('myApp', [])
eangular.module('myApp')
.Isso cria o módulo 'myApp' e substitui qualquer módulo existente chamado 'myApp':
angular.module('myApp', [])
Isso recupera um módulo existente 'myApp':
angular.module('myApp')
Eu estava substituindo meu módulo em outro arquivo, usando a primeira chamada acima, que criou outro módulo, em vez de recuperar como eu esperava.
Mais detalhes aqui: https://docs.angularjs.org/guide/module
fonte
Acabei de migrar para o angular 1.3.3 e descobri que se eu tivesse vários controladores em arquivos diferentes quando o aplicativo é substituído e perdi os primeiros contêineres declarados.
Não sei se é uma boa prática, mas talvez possa ser útil para outra.
fonte
Eu tive esse problema quando redeclarou acidentalmente
myApp
:Após a redeclaração,
Controller1
para de funcionar e gera o erro OP.fonte
Realmente ótimo conselho, exceto que o MESMO erro PODE ocorrer simplesmente por falta do script crítico incluído na sua página raiz
exemplo:
página: index.html
Ausência de
Quando uma Rota é informada sobre qual controlador e exibição servir:
Tão essencial que a questão indefinida do controlador PODE ocorrer neste erro acidental de nem mesmo fazer referência ao controlador!
fonte
Este erro também pode ocorrer quando você tem um projeto grande com muitos módulos. Verifique se o aplicativo (módulo) usado no seu arquivo angular é o mesmo que você usa no seu modelo, neste exemplo " thisApp ".
app.js
index.html
fonte
Se tudo mais falhar e você estiver usando o Gulp ou algo semelhante ... basta executá-lo novamente!
Perdi 30 minutos quadruplicando tudo quando tudo o que precisava era de um chute rápido nas calças.
fonte
Se você estiver usando rotas (alta probabilidade) e sua configuração tiver uma referência a um controlador em um módulo que não seja declarado como dependência, a inicialização poderá falhar também.
Por exemplo, supondo que você configurou o ngRoute para seu aplicativo, como
Tenha cuidado no bloco que declara as rotas,
Declarar
secondModule
como uma dependência após o 'ngRoute' deve resolver o problema. Eu sei que tive esse problema.fonte
Eu estava recebendo esse erro porque estava usando uma versão mais antiga do angular que não era compatível com o meu código.
fonte
Esses erros ocorreram, no meu caso, precedidos por erros de sintaxe no list.find () fuction; O método 'find' de uma lista não reconhecida pelo IE11, portanto, deve ser substituído pelo método Filter, que funciona para o IE11 e o chrome. consulte https://github.com/flrs/visavail/issues/19
fonte
Este erro, no meu caso, precedido por erro de sintaxe no método find de uma lista no IE11. método de localização substituído por método de filtro, conforme sugerido https://github.com/flrs/visavail/issues/19
então, o erro acima do controlador não definido foi resolvido.
fonte
Eu recebi o mesmo erro ao seguir um tutorial antigo com o AngularJS 1.4.3 (não o suficiente). De longe, a solução mais simples é editar a fonte angular.js de
para
e siga o tutorial como está e as funções globais descontinuadas funcionam como controladoras.
fonte
angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);