Das ist eine gute Lektion zum Umfang. Wenn Sie Dinge in anonyme Funktionen ( function(){...}());
) einfügen, werden Variablen, die in dieser Funktion deklariert sind, für Dinge außerhalb der Funktion unsichtbar. Ich werde in dieser Antwort nicht alle Javascript-Scope-Sachen durchgehen, weil es gut ist dokumentiert auf vielen anderen Fragen , aber im Wesentlichen ist dies Ihr Problem;
Kurz gesagt entfernen Sie die anonyme Funktion, die sich in Ihrem app.js
befindet, oder deklarieren Sie die Variable app
außerhalb der Funktion.
Es sieht so aus, als ob alle anderen Antworten von Leuten stammen, die Angular JS nicht kennen, und nur von Javascript. Sie alle geben die gleiche falsche Antwort, was dazu führen kann, dass der Code funktioniert, aber eine schlechte Übung einführt.
Das Einpacken Ihres Codes in eine anonyme Funktion ist in Ordnung!
Das ist nicht das Problem. Das Problem ist, dass Sie Ihren Controller in eine separate Datei legen, aber vergessen haben, sie in ein separates Modul zu legen.
loginController.js
%Vor%app.js
%Vor%Diese Antwort wird durch das eckige Seed-Projekt unterstützt, auf das auch in den offiziellen eckigen Dokumenten verwiesen wird: Ссылка
Hatte den gleichen Fehler. In meinem Fall war es die Reihenfolge der Javascript-Dateien.
Ich musste sicherstellen, dass app.js vor der Datei service.js deklariert wurde (die Datei, die einen Verweis auf die App enthielt).
%Vor%Außerdem könnte dieser Fehler ("App ist nicht definiert") durch einen Syntaxfehler in Ihrem JavaScript-Code verursacht werden. Überprüfen Sie daher Ihren Javascript-Code auf Syntaxfehler, wenn ein "Uncaught SyntaxError" damit verbunden ist.
Ihre App ist in einer anonymen Funktion definiert, sodass die App den Bereich enthält. Versuchen Sie, eine globale App-Variable zu erstellen.
%Vor%Entfernen Sie die anonyme Funktion von app.js wie:
%Vor% Und verschieben Sie auch Ihren startFrom
-Filterregistrierungscode aus dem Controller-Block. Eine letzte Sache, dass Ihr Controller eine Abhängigkeitsinjektion zuletzt akzeptiert: Data
, die nicht definiert ist, also entfernen Sie das auch.
Hoffe, das hilft!
Tags und Links javascript angularjs