Stellen Sie sich ein Modul als einen Ort vor, an dem Sie eine Reihe anderer Dinge wie Direktiven, Dienste, Konstanten usw. verkabeln können. Module können in andere Module injiziert werden, wodurch Sie einen hohen Grad an Wiederverwendung erhalten.
Wenn Sie eine eckige App schreiben, haben Sie ein Modul der obersten Ebene, das Ihr Anwendungscode ist (ohne Vorlagen).
Dienste sind hauptsächlich eine Möglichkeit zur Kommunikation zwischen Controllern. Sie können jedoch einen Dienst in einen anderen einfügen. Dienste werden häufig verwendet, um zu Ihren Datenspeichern zu gelangen, und die eckigen APIs wie ngResource werden von Personen umbrochen. Diese Technik ist nützlich, da sie das Testen (insbesondere das Verspotten) ziemlich einfach macht. Sie können Dienste für andere Aufgaben wie Authentifizierung, Protokollierung usw. haben.
Direktiven werden zum Erstellen von Widgets oder zum Umschließen vorhandener Elemente wie JQuery-Plugins verwendet. Das Umschließen vorhandener Plugins kann eine Herausforderung sein. Der Grund dafür ist, eine bidirektionale Datenbindung zwischen den Plugins und Angular herzustellen. Wenn Sie keine bidirektionale Datenbindung benötigen, müssen Sie diese nicht umbrechen.
Eine Direktive ist auch ein Ort, an dem DOM-Manipulationen durchgeführt, DOM-Ereignisse abgefangen usw. werden. Sie sollten keine DOM-bezogenen Aufgaben in Controllern oder Diensten ausführen. Das Erstellen von Anweisungen kann sehr komplex werden. IMHO empfehle ich, zuerst die API nach etwas zu durchsuchen, das das tun kann, wonach Sie suchen, oder die Google-Gruppe von Angular um Rat zu fragen.