Die Blogosphäre enthält eine Reihe von Artikeln zum Thema AngularJS-App-Strukturierungsrichtlinien wie diese (und andere):
- http://www.johnpapa.net/angular-app-structuring-guidelines/
- http://codingsmackdown.tv/blog/2013/04/19/angularjs-modules-for-great-justice/
- http://danorlando.com/angularjs-architecture-understanding-modules/
- http://henriquat.re/modularizing-angularjs/modularizing-angular-applications/modularizing-angular-applications.html
Ein Szenario, das ich bisher noch nicht für Richtlinien und Best Practices kennengelernt habe, ist der Fall, dass Sie eine große Webanwendung mit mehreren "Mini-Spa" -Anwendungen haben und alle Mini-Spa-Anwendungen eine bestimmte Menge an Code gemeinsam nutzen.
Ich beziehe mich nicht auf den Fall zu versuchen , mehrere haben ng-app
Erklärungen auf der gleichen Seite; Ich meine vielmehr verschiedene Abschnitte einer großen Site, die eine eigene, eindeutige ng-app
Deklaration haben.
Wie Scott Allen in seinem OdeToCode- Blog schreibt :
Ein Szenario, das ich nicht besonders gut angesprochen habe, ist das Szenario, in dem mehrere Apps in derselben größeren Webanwendung vorhanden sind und auf dem Client gemeinsam genutzten Code erfordern.
Gibt es empfohlene Vorgehensweisen, zu vermeidende Fallstricke oder gute Beispielstrukturen für dieses Szenario, auf die Sie verweisen können?
Update - 9/10/2015
Ein Projekt mit einer interessanten Organisationsstrategie ist MEAN.JS und sein Modulordner.
https://github.com/meanjs/mean
https://github.com/meanjs/mean/tree/master/modules
Ein weiteres Beispiel stammt aus dem ASP.NET Music Store SPA-Beispiel. https://github.com/aspnet/MusicStore https://github.com/aspnet/MusicStore/tree/master/src/MusicStore.Spa/ng-apps
quelle
Antworten:
Hier ist das Design, mit dem ich arbeite. Ich fand es nützlich für zwei größere Projekte, die ich gebaut habe und die bis jetzt noch keine Straßensperren getroffen haben.
Ordnerstruktur
apps/app1/index.html
wann eine Anfrage/app1
eingeht. Verwenden Sie benutzerfreundliche URLs (z. B.the-first-application/
stattapp1/
und ordnen Sie sie bei Bedarf mithilfe Ihrer Servertechnologie zu.global.html
in ,index.html
weil es enthält der Anbieter umfasst (siehe unten).index.html
(siehe unten).ng-app
und die Wurzel<div ui-view></div>
in dasindex.html
.<app-name>.module.js
Datei, die die Winkelmoduldefinition und die Abhängigkeitsliste enthält.<app-name>.js
Datei, die die Konfigurations- und Ausführungsblöcke der Module sowie die Routing-Konfiguration enthält.parts
Ordner mit den Controllern, Ansichten, Diensten und Anweisungen der Anwendung in einer Struktur, die für die jeweilige App sinnvoll ist . Ich glaube nicht , Unterordner magcontrollers/
,views/
usw. nützlich, weil sie nicht skaliert, aber YMMV.Beginnen Sie mit Diensten und Anweisungen in der App, in der sie verwendet werden. Sobald Sie etwas in einer anderen App benötigen, können Sie eine Bibliothek umgestalten. Versuchen Sie, funktional konsistente Bibliotheken zu erstellen, nicht nur Bibliotheken mit allen Direktiven oder Diensten.
Vermögenswerte
Ich minimiere sowohl JS- als auch CSS-Dateien für Release-Builds, arbeite jedoch während der Entwicklung mit nicht minimierten Dateien. Hier ist ein Setup, das dies unterstützt:
global.html
. Auf diese Weise können die schweren Daten beim Navigieren zwischen SPAs aus dem Cache geladen werden. Stellen Sie sicher, dass das Caching ordnungsgemäß funktioniert.index.html
. Dies sollte nur die app-spezifischen Dateien sowie die verwendeten Bibliotheken enthalten.Die Ordnerstruktur oben erleichtert das Auffinden der richtigen Dateien für die Erstellungsschritte der Minimierung.
quelle
Single Page Apps (SPAs) sind nicht für die Verwendung mit einer sehr großen Anwendung und mehreren Mini-SPAs innerhalb der Hauptanwendung vorgesehen. Das größte Problem werden die Ladezeiten sein, da alles von vorne geladen werden muss.
Eine Möglichkeit, dies zu beheben, ist die Verwendung einer Navigationsseite, die Sie zu den einzelnen SPAs führt. Die Navigationsseite ist recht übersichtlich und Sie können nur jeweils ein SPA laden, je nachdem, was ausgewählt wurde. Sie können eine Linkleiste mit Navigationslinks in jedem Ihrer SPAs bereitstellen, damit Benutzer nicht immer zur Navigationsseite zurückkehren müssen, wenn sie in einen anderen Bereich wechseln müssen.
Die Verwendung dieses Ansatzes kann einige Probleme mit persistenten Informationen in SPAs verursachen. Aber wir sprechen über etwas, das SPAs nicht tun sollten. Es gibt einige Frameworks, die bei der clientseitigen Datenpersistenz helfen können. Die Brise ist die erste, die mir in den Sinn kommt, aber es gibt noch andere.
In Bezug auf das Layout - Mehrere Programmiererfragen richten sich an das Layout großer Projekte, je nach Ihren speziellen Anforderungen. Ich bin auf dieses und jenes gestoßen . Es gibt nichts Magisches an SPAs, das sich auf Ihr Anwendungslayout auswirken würde, als das, was in diesen Fragen bereits beantwortet wurde.
Es gibt jedoch unterschiedliche Ansätze, die für verschiedene Projekte am besten geeignet sind. Ich würde empfehlen, das Grundlayout beizubehalten, das das Eck-Seed-Projekt vorsieht. Erstellen Sie separate Ordner aus den bereitgestellten für Ihre benutzerdefinierten Pakete und den Quellcode. Verwenden Sie in Ihrem Quellordner ein Projektlayout, das für Ihre Anforderungen sinnvoll ist.
quelle
Wenn Ihre Anwendung mehrere ng-app-Deklarationen auf derselben Seite benötigt, müssen Sie das AngularJS-Modul manuell booten, indem Sie einen Modulnamen eingeben, wie unten gezeigt:
Dieser Plunker erklärt, wie wir AngularJS manuell booten können.
quelle