Wie große AngularJS-Projekte in Module aufgeteilt werden

8

Ich komme aus der Welt von Backbone und JavascriptMVC. Aber ich bin wirklich versucht, zu AngularJS zu wechseln. Bis jetzt habe ich ein großes Problem, das mich davon abhält, zu konvertieren.

Ich erstelle einseitige Apps. Stellen wir uns vor, dass es ein Tab-Modul, ein Datei-Upload-Modul und ein Dateilisten-Modul enthält.

Was ich in Backbone machen würde, wäre, dass ich diese als eigenständige Module aufteilen würde mit ihrer eigenen Ansicht Vorlage, Viewcontroller und so weiter. Auf diese Weise kann ich das Modul an mehreren Stellen in meiner App verwenden. Die Module kennen nichts anderes als sich selbst.

Wie soll dieses Thema in AngularJS behandelt werden? Ist es möglich, ein angular.module pro Modul zu erstellen (wie zB ein Tab-Modul)?

Ich glaube, sie erzählen, wie man in ihrer Dokumentation viele Controller innerhalb eines Moduls erstellt. Aber das klingt nicht nach dem, was ich brauche. Oder verkenne ich hier einige wichtige Konzepte?

BEARBEITEN: Ich habe mehr Nachforschungen angestellt. Es sieht so aus, als ob ich nach Direktiven suche. Ein Modul in AngularJS repräsentiert die gesamte Web-App. Also verwirrte mich das Mischen der Namen "Komponenten" und "Module".

Bin ich jetzt auf dem richtigen Weg?

    
funkyfly 12.05.2013, 16:05
quelle

3 Antworten

3

Sie können absolut Module definieren und Ihre Module auf der App-Ebene einschließen. Dann können Sie mit der Abhängigkeitsinjektion Ihren Controllern erlauben, das zu verwenden, was sie brauchen.

Ich habe ein Konzeptbeispiel für eine kleine App, an der ich arbeitete, um eckig zu lernen (es ist ziemlich schmutzig und mein Spielplatz):

Zypern

Meine App-Definition sieht folgendermaßen aus:

%Vor%

Sie können sehen, dass ich eine Reihe verschiedener Module mit meiner App einschließe, und dann ein Beispiel für einen Controller, der einige Dienste vom Dienstmodul übernimmt:

%Vor%

Hier ist eines der Module definiert (mit seiner Abhängigkeit auch):

%Vor%

In Bezug auf Vorlagen können Sie diese definieren und sie mit Ihren Routenwerten einschließen:

%Vor%

Oder Sie können sie natürlich mit ng-include

aufrufen     
lucuma 12.05.2013 16:12
quelle
1

Ja, Sie sind jetzt auf dem richtigen Weg. Eine andere Art von Modul in Angular sind Dienste. Dienste können auf sehr saubere Weise in jeden Controller oder jede Richtlinie (oder sogar in andere Dienste) eingefügt werden.

Direktiven sind in erster Linie für wiederverwendbare Dinge gedacht, die sichtbar Teil der Benutzeroberfläche sind. Dies spiegelt sich in der Art wider, wie sie verwendet werden: durch Hinzufügen von DOM-Elementen / Attributen.

Dienste sind für abstraktere Dinge oder Dinge, deren Existenz und Verhalten auch ohne direkt korrespondierende Benutzeroberfläche Sinn macht. Je mehr Logik Sie vernünftig in unabhängige Dienste schieben können, desto modularer wird Ihre Anwendung und desto wiederverwendbarer ist der Code.

Controller neigen meiner Erfahrung nach dazu, am wenigsten wiederverwendbar zu sein und die ersten zu sein, die komplex und chaotisch werden. (Aber das könnte ich nur sein, wenn ich sie falsch gebrauche.) Die Faustregel ist, Controller so einfach wie möglich zu halten. Beschränken Sie sie auf die reine reine Geschäftslogik und versuchen Sie, die meisten davon auch in die Dienste zu integrieren.

Eckig hat eine etwas steile Lernkurve, aber forscht weiter und dann werden die verschiedenen Teile sichtbar und passen sich an. Eine Ressource genau hier auf SO ist diese Frage: " Thinking in AngularJS "wenn ich einen jQuery-Hintergrund habe?

    
Supr 13.05.2013 12:07
quelle
0

Sieh dir meinen Beitrag an:

Es geht um eine Lösung mit RequireJS, um die Anwendung in mehrere Module zu teilen, die sehr einfach miteinander verbunden werden können.

Lassen Sie es mich wissen, wenn Sie es hilfreich finden, damit ich grundlegende Informationen hier eingeben kann, um zu vermeiden, auf einen Link zu verweisen, anstatt wertvollen Inhalt in die Antwort einzutragen.

    
LeoG 31.12.2014 00:49
quelle

Tags und Links