Errore AngularJS: ‘argomento’ FirstCtrl ‘non è una funzione, ottenuto indefinito’

Ho notato che la stessa domanda è stata posta alcune volte qui, ho provato a risolverlo ma nulla aiuta.

Sto seguendo questo tutorial con i video di Egghead.

Ma quando arrivo alla sezione Controller e Condivisione dei dati tra i controller, non riesco a farlo funzionare.

Quando lo eseguo con Chrome, ottengo questo errore nella console:

‘argomento’ FirstCtrl ‘non è una funzione, ottenuto indefinito’.

Non so davvero cosa c’è che non va. Il codice è lo stesso del tutorial.

Ecco il codice per l’HTML che ho:

   AngularJS Tutorials: Controllers     

{{data.message + " world"}}

Wrap me in a foundation component

Ed ecco il codice per main.js:

 function FirstCtrl($scope){ $scope.data = {message: "Hello"}; } 

Hai 2 direttive senza nome ng-app nel tuo html.
Perdi quello nel tuo div.

Aggiornare
Proviamo un approccio diverso.
Definire un modulo nel file js e assegnargli la direttiva ng-app . Dopodiché, definisci il controller come un componente ng, non come una semplice funzione:

 

e la parte js:

 angular.module('myAppName', []) .controller('FirstCtrl', function($scope) { $scope.data = {message: 'Hello'}; }); 

Ecco una demo online che sta facendo proprio questo: http://jsfiddle.net/FssbL/1/

Ho ottenuto esattamente lo stesso messaggio di errore e nel mio caso si è scoperto che non ho elencato il file JS del controller (ad esempio first-ctrl.js) nel mio index.html

Ho appena fatto questo tutorial e ho seguito la risposta @ gion_13. Ancora non ha funzionato. Risolto facendo il mio nome di ng-app nell’indice identico a quello nel mio file js. Esattamente identico, anche le virgolette. Così:

 

e il js:

  angular.module("myapp", []) .controller('FirstCtrl',function($scope) { $scope.data= {message:"hello"}; }); 

Strano come la ng-app debba essere identica ma il ng-controller no.

Devi dare un nome alla tua ng-app , dando alla tua app uno spazio dei nomi; semplicemente usare ng-app non è abbastanza .

Invece di:

  ... 

Avrai bisogno di qualcosa del genere, invece:

  ... 

Quindi, in questo modo:

 var app = angular.module("app", []).controller("ActionsController", function($scope){}); 

Un’altra bella: ridefinire accidentalmente i moduli. Ho copiato / incollato roba un po ‘troppo avidamente prima e ho finito per avere una definizione del modulo da qualche parte, che ho annullato con le definizioni del mio controller:

 // controllers.js - dependencies in one place, perfectly fine angular.module('my.controllers', [/* dependencies */]); 

Quindi nelle mie definizioni dovevo fare riferimento in questo modo:

 // SomeCtrl.js - grab the module, add the controller angular.module('my.controllers') .controller('SomeCtrl', function() { /* ... */ }); 

Quello che ho fatto invece è stato:

 // Do not try this at home! // SomeCtrl.js angular.module('my.controllers', []) // <-- redefined module, no harm done yet .controller('SomeCtrl', function() { /* ... */ }); // SomeOtherCtrl.js angular.module('my.controllers', []) // <-- redefined module - SomeCtrl no longer accessible .controller('SomeOtherCtrl', function() { /* ... */ }); 

Nota la parentesi extra nella chiamata a angular.module .

rimuovere ng-app = “” da

 

e semplicemente farlo

 

Anch’io ho affrontato lo stesso problema. Ma il problema era che mi sono dimenticato di elencare il modulo nella lista dei moduli da cui dipende l’app ng.

Ho affrontato questo problema e risolto con il seguente modo:

  1. prima rimuovi ng-app da:

      
  2. aggiungi il nome di ng-app a myApp:

     
  3. aggiungi questa riga di codice prima della funzione:

     angular.module('myApp', []).controller('FirstCtrl',FirstCtrl); 

aspetto finale della sceneggiatura:

 angular.module('myApp', []).controller('FirstCtrl',FirstCtrl); function FirstCtrl($scope){ $scope.data = {message: "Hello"}; } 

Nel mio caso, questo messaggio proviene da un’iniezione di dipendenza dimenticata nel modulo principale

Ciò può accadere se hai gulp configurato in modo errato per aggiungere il tuo codice di app angular più di una volta. Nel mio caso, questo era in index.js, e lo aggiungeva come parte della directory dei file js (globbed in gulp) prima e dopo le dichiarazioni del mio controller. Una volta che ho aggiunto un’esclusione per index.js da non essere minimizzata e iniettata la seconda volta, la mia app ha iniziato a funzionare. Un altro consiglio se una delle soluzioni di cui sopra non risolve il problema.

Innanzitutto – Se il nome del modulo non è definito, nel JS non sarà ansible accedere al modulo e colbind il controller ad esso.

È necessario fornire il nome del modulo al modulo angular. c’è anche una differenza nell’uso del modulo di definizione 1. angular.module (“firstModule”, []) 2. angular.module (“firstModule”)

1 – uno è quello di dichiarare il nuovo modulo “firstModule” senza dipendenza aggiunto in secondi argomenti. 2 – Serve per usare il “firstModule” che è inizializzato da qualche altra parte e si sta utilizzando il tentativo di ottenere il modulo inizializzato e apportare modifiche ad esso.

Ho affrontato questo problema, ma sono stato in grado di correggere questo problema rinominando il controller, per favore provatelo.

 ctrlSub.execSummaryDocuments = function(){}; 

a volte qualcosa di sbagliato nella syntax del codice all’interno della funzione genera questo errore. Controlla la tua funzione correttamente. Nel mio caso è successo quando stavo cercando di assegnare i campi Json con valori e stavo usando due punti: per rendere l’assegnazione invece di segno uguale = …

Ho avuto due controller con lo stesso nome definito in due diversi file javascript. Irritando quell’angular non si può dare un messaggio di errore più chiaro che indica un conflitto nello spazio dei nomi.

Non sono sicuro di questo tutorial, ma ho avuto lo stesso problema quando ho dimenticato di includere il file nel processo di minimizzazione grunt / gulp.

 grunt.initConfig({ uglify: { my_target: { files: { 'dest/output.min.js': ['src/input1.js', 'src/missing_controller.js'] } } } }); 

Spero possa aiutare.

Guarda anche l’involucro della tua lettera. Ho trascorso un’ora buona a inseguire questo bug.

 

mentre io chiamo il controller

 angular .module('app') .controller('ForgotpwdController', ForgotpwdController); 

Dovrebbero essere tutti coerentemente denominati, in questo caso Forgot p wdController con minuscolo p.