Notei que a mesma pergunta foi feita algumas vezes aqui, tentei resolver mas nada adiantou.
Estou seguindo este tutorial com os vídeos egghead.
Mas quando chego à seção de Controladores e Compartilhamento de dados entre controladores, não consigo fazer funcionar.
Quando o executo com o Chrome, recebo este erro no console:
'argumento' FirstCtrl 'não é uma função, foi indefinida'.
Eu realmente não sei o que há de errado. O código é o mesmo do 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
fonte
fonte
Respostas:
Você tem 2
ng-app
diretivas sem nome em seu html.Perca aquele em seu div.
Atualizar
Vamos tentar uma abordagem diferente.
Defina um módulo em seu arquivo js e atribua a
ng-app
diretiva a ele. Depois disso, defina o controlador como um componente ng, não como uma função simples:e a parte js:
Aqui está uma demonstração online que faz exatamente isso: http://jsfiddle.net/FssbL/1/
fonte
Recebi exatamente a mesma mensagem de erro e, no meu caso, descobri que não listei o arquivo JS do controlador (por exemplo, first-ctrl.js) no meu index.html
fonte
Acabei de fazer este tutorial e segui a resposta de @ gion_13. Ainda não funcionou. Resolvi tornando o nome do meu ng-app no índice idêntico ao do meu arquivo js. Exatamente idêntico, até as aspas. Assim:
e o js:
Estranho como o ng-app tem que ser idêntico, mas o ng-controller não.
fonte
Você deve nomear seu
ng-app
, dando ao seu aplicativo um namespace; simplesmente usarng-app
não é suficiente .Ao invés de:
Você precisará de algo assim:
Então, assim:
fonte
Outro bom: redefinir módulos acidentalmente. Eu copiei / colei coisas um pouco ansiosamente mais cedo e acabei tendo uma definição de módulo em algum lugar, que eu substituí com minhas definições de controlador:
Então, em minhas definições, eu deveria referenciá-lo assim:
O que eu fiz em vez disso foi:
Observe o colchete extra na chamada para
angular.module
.fonte
remova ng-app = "" de
e simplesmente faça
fonte
Eu também enfrentei o mesmo problema. Mas o problema é que esqueci de listar o módulo na lista de módulos dos quais o ng-app depende.
fonte
Eu enfrentei esse problema e ele foi corrigido da seguinte maneira:
primeiro remova o ng-app de:
adicione o nome do ng-app ao myApp:
adicione esta linha de código antes da função:
aparência final do script:
fonte
No meu caso, esta mensagem vem de injeção de dependência esquecida no módulo principal
fonte
Isso pode acontecer se você tiver configurado incorretamente o gulp para adicionar o código do aplicativo angular mais de uma vez. No meu caso, isso estava em index.js e estava adicionando-o como parte do diretório de arquivos js (globbed em gulp) antes e depois de minhas declarações de controlador. Depois de adicionar uma exclusão para index.js para não ser minimizado e injetar pela segunda vez, meu aplicativo começou a funcionar. Outra dica se alguma das soluções acima não resolver o seu problema.
fonte
Primeiramente - Se o nome do módulo não estiver definido, no JS você não conseguirá acessar o módulo e vincular o controlador a ele.
Você precisa fornecer o nome do módulo ao módulo angular. há uma diferença no uso de definir módulo também 1. angular.module ("firstModule", []) 2. angular.module ("firstModule")
1 - um é declarar o novo módulo "firstModule" sem nenhuma dependência adicionada nos segundos argumentos. 2 - Isso é para usar o "firstModule" que é inicializado em outro lugar e você está tentando pegar o módulo inicializado e fazer modificações nele.
fonte
Enfrentei esse problema, mas consegui corrigi-lo renomeando o controlador, experimente.
fonte
às vezes, algo errado na sintaxe do código dentro da função gera esse erro. Verifique sua função corretamente. No meu caso, aconteceu quando eu estava tentando atribuir valores a campos Json e estava usando dois pontos: para fazer a atribuição em vez do sinal de igual = ...
fonte
Eu tinha dois controladores com o mesmo nome definido em dois arquivos javascript diferentes. É irritante que o angular não possa fornecer uma mensagem de erro mais clara indicando um conflito de namespace.
fonte
Não tenho certeza sobre este tutorial, mas tive o mesmo problema quando esqueci de incluir o arquivo no processo de minimização grunt / gulp.
Espero que ajude.
fonte
Cuidado com a caixa da carta também. Passei uma boa hora perseguindo esse bug.
enquanto eu nomeio o controlador
Todos eles devem ser nomeados de forma consistente, neste caso Forgot p wdController com minúsculo p.
fonte