Normalerweise wird Angular auf einer Seite mit einer Direktive wie ng-app="myModule"
initialisiert, aber es ist zulässig, einfach ng-app
zu verwenden. Da jedoch Dinge wie Controller mit myModule
registriert sind, ist es überhaupt sinnvoll, einfach ng-app
zu verwenden? Gibt es eine Möglichkeit, Controller usw. zu registrieren, wenn Sie kein Modul für ng-app="..."
angeben?
Vor Angular 1.3 (als Sie Controller im globalen Bereich definieren konnten) konnte Angular Controller, die global definiert wurden, automatisch erkennen.
Ab Angular 1.3 müssen alle Controller innerhalb eines Moduls definiert werden und Sie erhalten nur sehr eingeschränkte Funktionalität aus einem ng-app
ohne ein Modul. Es könnte möglicherweise für das Prototyping von Vorteil sein, aber selbst dort werden Sie nicht viel bekommen.
Also, vor-Winkel 1.3 Verwendung:
%Vor%Sie könnten Ihr Javascript so definieren und es würde funktionieren:
%Vor%Bearbeiten:
Wie in den Kommentaren erwähnt, können Sie dieses Verhalten weiterhin mithilfe von $controllerProvider.allowGlobals()
aktivieren. Allerdings hat das Angular-Team versucht, uns von Anfang an daran zu hindern, Controller so zu definieren, und sollte vermieden werden:
HINWEIS: Obwohl mit Angular Controller-Funktionen im globalen Bereich erstellt werden können, wird dies nicht empfohlen. In einer realen Anwendung sollten Sie die .controller-Methode Ihres Angular Moduls für Ihre Anwendung verwenden [...]
Lesen Sie das erste Beispiel Ссылка
Wenn im Beispiel unten die ngApp-Direktive nicht auf dem HTML-Element platziert würde, würde das Dokument nicht kompiliert, der AppController würde nicht instanziiert und die {{a + b}} würde nicht in 3 aufgelöst.
%Vor%BEARBEITEN: Sie können einen Controller nicht (nicht empfohlen) registrieren, wenn Sie Ihre ng-App nicht angeben. Wenn du nur ng-app oder ng-app="" schreibst, dann bekommst du einfach grundlegende eckige Funktionen, wie dieses Zeug: Ссылка . Das Ziel von ng-app ist es, anzugeben, auf welches Modul Sie sich bei der Registrierung von Controllern beziehen.
Um es klar zu sagen: Die angApp-Direktive in AngularJS ermöglicht es Ihnen, eine AngularJS-Anwendung automatisch zu starten, indem Sie das Stammelement der Anwendung automatisch in Ihrem body / html-Tag über die DOM-Initialisierung festlegen. Sie können diesen Initialisierungsprozess auch mehr steuern, indem Sie Ihre App manuell über angle.bootstrap starten und mehrere AngularJS-Anwendungen gleichzeitig starten (sofern Sie sie nicht verschachteln). Die Hauptseparation ist, dass Sie einen oder den anderen Prozess verwenden müssen, entweder ng-app oder angular.bootstrap separat, was hoffentlich offensichtlich ist, da Initialisierungen nicht überschrieben werden sollen.
Ein detaillierterer Einblick in diesen Prozess ist hier zu finden: AngularJS Developer Guide: Bootstrap
Was bedeutet das nun im Zusammenhang mit Ihrer Frage? ng App-Initialisierung ermöglicht nur eine einzige Instanz pro Seite, dieses eine Modul pro einzelnes HTML-Element; während angular.bootstrap gibt Ihnen diese Funktionalität noch manuell. Die wahre Magie wäre, wenn Sie ng-app wie angular.bootstrap verwenden könnten; In diesem Fall können Sie sich ngModule anschauen.
Ich möchte auf einen Artikel verweisen hat mir geholfen, besser zu verstehen, wie ich ngModule wie ngApp nutzen kann. Allerdings sollten Sie beachten, dass Sie auch dann, wenn Sie ngModule verwenden, kontinuierlich Funktionen nutzen, die ngApp nachahmen und erweitern. Daher können Sie daraus schließen, dass die verbleibende Funktionalität die DOM-App-Initialisierung über die X-Methode sein wird ... egal, ob Sie mit ngApp umgehen oder nicht, Sie müssen sich immer noch mit dem Gesamtbild auseinandersetzen.
Lassen Sie mich wissen, ob es Ihnen geholfen hat oder wies Sie zumindest in eine Richtung, der Sie folgen können.
Tags und Links angularjs