Mit Angular 1.3+ können Sie die globale Controller-Deklaration nicht mehr für den globalen Bereich verwenden (ohne explizite Registrierung). Sie müssten den Controller mithilfe der module.controller
Syntax registrieren .
Beispiel:-
angular.module('app', [])
.controller('ContactController', ['$scope', function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}]);
oder
function ContactController($scope) {
$scope.contacts = ["[email protected]", "[email protected]"];
$scope.add = function() {
$scope.contacts.push($scope.newcontact);
$scope.newcontact = "";
};
}
ContactController.$inject = ['$scope'];
angular.module('app', []).controller('ContactController', ContactController);
Es ist eine bahnbrechende Änderung, aber es kann deaktiviert werden, um Globals zu verwendenallowGlobals
.
Beispiel:-
angular.module('app')
.config(['$controllerProvider', function($controllerProvider) {
$controllerProvider.allowGlobals();
}]);
Hier ist der Kommentar von Angular Quelle: -
- Überprüfen Sie, ob ein Controller mit Vorname über registriert ist
$controllerProvider
- Überprüfen Sie, ob die Auswertung der Zeichenfolge im aktuellen Bereich einen Konstruktor zurückgibt
- Wenn $ controllerProvider # allowGlobals, überprüfen Sie
window[constructor]
das globale window
Objekt (nicht empfohlen).
.....
expression = controllers.hasOwnProperty(constructor)
? controllers[constructor]
: getter(locals.$scope, constructor, true) ||
(globals ? getter($window, constructor, true) : undefined);
Einige zusätzliche Überprüfungen: -
Stellen Sie sicher, dass Sie den App-Namen auch in die ng-app
Direktive Ihres eckigen Stammelements einfügen (z. B.: - html
). Beispiel: - ng-app = "myApp"
Wenn alles in Ordnung ist und das Problem weiterhin auftritt, stellen Sie sicher, dass die Skripte die richtige Datei enthalten.
Sie haben dasselbe Modul nicht zweimal an verschiedenen Stellen definiert, was dazu führt, dass zuvor auf demselben Modul definierte Entitäten gelöscht werden. Beispiel angular.module('app',[]).controller(..
und erneut an einer anderen Stelle angular.module('app',[]).service(..
(wobei natürlich beide Skripte enthalten sind) können dazu führen, dass der zuvor registrierte Controller auf dem Modul Modul app
, das mit der zweiten Neuerstellung des Moduls gelöscht werden soll.
Ich habe dieses Problem erhalten, weil ich eine Controller-Definitionsdatei in einen Abschluss eingeschlossen hatte:
Aber ich hatte vergessen, diesen Abschluss tatsächlich aufzurufen, um diesen Definitionscode auszuführen und Javascript tatsächlich mitzuteilen, dass mein Controller existiert. Das heißt, das Obige muss sein:
Beachten Sie das () am Ende.
quelle
Ich bin ein Anfänger mit Angular und habe den grundlegenden Fehler gemacht, den App-Namen nicht in das Angular-Root-Element aufzunehmen. Also, den Code von ändern
zu
arbeitete für mich. @PSL, hat dies bereits in seiner obigen Antwort behandelt.
quelle
Ich hatte diesen Fehler, weil ich den Unterschied zwischen
angular.module('myApp', [])
und nicht verstanden habeangular.module('myApp')
.Dadurch wird das Modul 'myApp' erstellt und jedes vorhandene Modul mit dem Namen 'myApp' überschrieben:
angular.module('myApp', [])
Dadurch wird ein vorhandenes Modul 'myApp' abgerufen :
angular.module('myApp')
Ich hatte mein Modul in einer anderen Datei überschrieben und den ersten Aufruf oben verwendet, bei dem ein anderes Modul erstellt wurde, anstatt es wie erwartet abzurufen.
Weitere Details hier: https://docs.angularjs.org/guide/module
quelle
Ich habe gerade auf Angular 1.3.3 migriert und festgestellt, dass ich mehrere Controller in verschiedenen Dateien hatte, wenn die App überschrieben wurde und ich zuerst deklarierte Container verloren habe.
Ich weiß nicht, ob es eine gute Praxis ist, aber vielleicht kann sie für eine andere hilfreich sein.
quelle
Ich hatte dieses Problem, als ich versehentlich neu deklarierte
myApp
:Stört nach der erneuten Deklaration nicht
Controller1
mehr und löst den OP-Fehler aus.quelle
Wirklich gute Ratschläge, außer dass der gleiche Fehler einfach dadurch auftreten kann , dass das kritische Skript auf Ihrer Stammseite fehlt
Beispiel:
Seite: index.html
Vermisst
Wenn einer Route mitgeteilt wird, welcher Controller und welche Ansicht zu bedienen sind:
Daher kann das undefinierte Controller-Problem bei diesem versehentlichen Fehler auftreten, nicht einmal auf den Controller zu verweisen!
quelle
Dieser Fehler kann auch auftreten, wenn Sie ein großes Projekt mit vielen Modulen haben. Stellen Sie sicher, dass die in Ihrer Winkeldatei verwendete App (Modul) mit der in Ihrer Vorlage verwendeten übereinstimmt , in diesem Beispiel " thisApp ".
app.js.
index.html
quelle
Wenn alles andere fehlschlägt und Sie Gulp oder ähnliches verwenden, führen Sie es einfach erneut aus!
Ich habe 30 Minuten vervierfacht, um alles zu überprüfen, wenn alles, was es brauchte, ein schneller Tritt in die Hose war.
quelle
Wenn Sie Routen verwenden (hohe Wahrscheinlichkeit) und Ihre Konfiguration einen Verweis auf einen Controller in einem Modul enthält, der nicht als Abhängigkeit deklariert ist, schlägt die Initialisierung möglicherweise ebenfalls fehl.
Angenommen, Sie haben ngRoute für Ihre App konfiguriert, z
Seien Sie vorsichtig in dem Block, der die Routen deklariert.
Deklarieren Sie
secondModule
als eine Abhängigkeit nach ‚ngRoute‘ sollte das Problem beheben. Ich weiß, dass ich dieses Problem hatte.quelle
Ich habe diesen Fehler erhalten, weil ich eine ältere Version von Angular verwendet habe, die nicht mit meinem Code kompatibel war.
quelle
Diese Fehler traten in meinem Fall vor Syntaxfehlern bei list.find () auf. Die 'find'-Methode einer Liste wird von IE11 nicht erkannt und muss daher durch die Filter-Methode ersetzt werden, die sowohl für IE11 als auch für Chrome funktioniert. Siehe https://github.com/flrs/visavail/issues/19
quelle
Diesem Fehler ging in meinem Fall ein Syntaxfehler bei der Suchmethode einer Liste in IE11 voraus. So ersetzt Find-Methode durch Filter-Methode wie vorgeschlagen https://github.com/flrs/visavail/issues/19
dann über Controller nicht definierter Fehler behoben.
quelle
Ich habe den gleichen Fehler erhalten, als ich einem alten Tutorial mit (nicht alt genug) AngularJS 1.4.3 gefolgt bin. Die mit Abstand einfachste Lösung besteht darin, die Quelle von angle.js aus zu bearbeiten
zu
Befolgen Sie einfach das Lernprogramm wie es ist, und die veralteten globalen Funktionen funktionieren nur als Controller.
quelle
angular.module('app') .config(['$controllerProvider', function($controllerProvider) { $controllerProvider.allowGlobals(); }]);