Ich habe gerade angefangen, Angular JS zu lernen und einige grundlegende Beispiele erstellt, aber ich bin mit dem folgenden Problem festgefahren.
Ich habe 2 Module und 2 Controller erstellt.
shoppingCart -> ShoppingCartController
namesList -> NamesController
Jedem Controller sind Ansichten zugeordnet. Die erste Ansicht wird gut gerendert, die zweite jedoch nicht. Es gibt keine Fehler.
Bitte helfen Sie mir, dieses Problem zu lösen.
Es besteht auch die Möglichkeit, eine Konsole in View hinzuzufügen, um zu überprüfen, welche Werte vom Controller übergeben werden.
zB im folgenden div können wir console.log hinzufügen und die Controller-Werte ausgeben
<div ng-app="shoppingCart" ng-controller="ShoppingCartController">
</div>
{{item.product_name}}
Antworten:
Wie von Cherniv erwähnt, müssen wir die Module booten, um mehrere ng-Apps auf derselben Seite zu haben. Vielen Dank für alle Beiträge.
quelle
Um mehrere Anwendungen in einem HTML-Dokument auszuführen, müssen Sie sie manuell mit angle.bootstrap () booten.
HTML
JS
Der Grund dafür ist, dass nur eine AngularJS-Anwendung pro HTML-Dokument automatisch gebootet werden kann. Das erste
ng-app
im Dokument gefundene Element wird verwendet, um das Stammelement für den automatischen Bootstrap als Anwendung zu definieren.Mit anderen Worten, während es technisch möglich ist, mehrere Anwendungen pro Seite zu haben, wird nur eine ng-app-Direktive automatisch vom Angular-Framework instanziiert und initialisiert.
quelle
ngApp
Direktive automatisch hochgeladen werden. Sie können jedoch mehrere Apps verwenden, solange Sie die nachfolgenden manuell booten.namesList
sich dann das Modul? Könnten Sie bitte Ihre Antwort aktualisieren, damit sie klarer wird?Sie können
angular.bootstrap()
direkt verwenden ... das Problem ist, dass Sie die Vorteile von Richtlinien verlieren.Zuerst müssen Sie einen Verweis auf das HTML-Element erhalten, um es booten zu können. Dies bedeutet, dass Ihr Code jetzt mit Ihrem HTML gekoppelt ist.
Zweitens ist die Assoziation zwischen den beiden nicht so offensichtlich. Mit können
ngApp
Sie klar erkennen, welcher HTML-Code mit welchem Modul verknüpft ist, und wissen, wo Sie nach diesen Informationen suchen müssen. Aberangular.bootstrap()
könnte von überall in Ihrem Code aufgerufen werden.Wenn Sie dies überhaupt tun möchten, verwenden Sie am besten eine Direktive. Welches ist, was ich getan habe. Es heißt
ngModule
. So würde Ihr Code aussehen, wenn Sie ihn verwenden:Den Quellcode dafür erhalten Sie unter:
http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/
Es ist auf die gleiche Weise implementiert wie
ngApp
. Es ruft einfachangular.bootstrap()
hinter die Kulissen.quelle
In meinem Fall musste ich das Bootstrapping meiner zweiten App einpacken,
angular.element(document).ready
damit es funktioniert:quelle
angular.element(callback)
anstelle vonangular.element(document).ready(callback))
. Siehe AngularJS angular.element API-Referenz . Auch github.com/angular/angular.js/commit/…Hier ist ein Beispiel für zwei Anwendungen auf einer HTML-Seite und zwei Conroller in einer Anwendung:
quelle
Sie können mehrere Module in einem rootModule zusammenführen und dieses Modul als ng-app einem übergeordneten Element zuweisen, z. B. body-Tag.
Code ex:
quelle
quelle
Es wird nur eine App automatisch initialisiert. Andere müssen wie folgt manuell initialisiert werden:
Syntax:
Beispiel:
AngularJS API
quelle
Sie können eine Root-ng-App definieren und in dieser ng-App können Sie mehrere nd-Controler definieren. So was
quelle
quelle
Updated JsFiddle:
http://jsfiddle.net/ep2sQ/1011/quelle
ng-app
? jsfiddle.net/vwcbtzdgVerwenden Sie
angular.bootstrap(element, [modules], [config])
diese Option, um die AngularJS-Anwendung manuell zu starten (weitere Informationen finden Sie im Bootstrap-Handbuch ).Siehe folgendes Beispiel:
quelle
quelle