Come trovare un motivo “Argomento” MyCtrl “AngularJS non è una funzione, non è definito”

Quando AngularJS si arresta in modo anomalo con un errore ” Argomento ‘MyCtrl’ non è una funzione, non è definito ” potrebbe essere un po ‘difficile trovare un motivo per cui.

Qui voglio fare una sorta di “check list”, cosa dovresti controllare quando hai un errore

  1. Il file con ‘MyCtrl’ è collegato tramite html ? (controlla due volte se concatri o elimini i tuoi file)
 
  1. “MyCtrl” è stato definito correttamente ?

Ci sono alcuni modelli:

 app.controller('MyCtrl', ['$scope', function ($scope) {...}]) app.controller('MyCtrl', function ($scope) {...}) var MyCtrl = function ($scope) {...}) 
  1. ‘MyCtrl’ è definito nel modulo destro?
  2. Il modulo “MyCtrl” è aggiunto alle dipendenze delle app ?
 angular.module('app', ['app.sources']); 
  1. Se definisci il tuo modulo più volte, dovresti definirlo in questo ordine :

    • La prima definizione dovrebbe essere simile
 angular.module('app.sources', []); 

(con [ ] )

  • Le definizioni successive dovrebbero essere simili
 angular.module('app.sources'); 

(senza [ ] )

Importante : l’ordine delle dichiarazioni è importante – la definizione con [ ] dovrebbe essere la prima.

  1. Verifica che il modulo sia definito solo una volta . Potresti aver dimenticato di rinominare il modulo dopo il copia-incolla. Controlla src per stringhe come
 angular.module('app.sources', []); 
  1. Controlla la tua 'ng-app' . Meglio usare solo uno di questi con nome come ng-app='app' (in altre parole non definire più direttive ngApp senza nome)

  2. La syntax del tuo controller è corretta per la tua versione di AngularJS ?

(C’è una differenza tra la definizione in Angular 1.0.x e 1.2.xe versioni successive. Con versioni angolari maggiori di 1.3.x , non è ansible dichiarare una funzione di costruzione globale e usarla con ng-controller)

Se stai usando il ng-controller con syntax “controller come”, assicurati di controllare che il nome del controller sia corretto.

Il mio caso:

 //controller register angular.module("myApp").controller("someController", SomeController) //in my code 

Si noti che ho usato ng-controller="SomeController as vm" , dove SomeController ha una S maiuscola. Dovrebbe essere stato con una s minuscola perché è così che l’ho registrato.

Quindi, controlla che il nome del tuo controller sia corretto.