Das Modul ist ein wichtiger Weg, um Module in Winkel zu organisieren. Es bietet die Möglichkeit, eine Reihe von zusammenhängenden Geschäftskomponenten (Controller, Service, Filter, Richtlinie ...) zusammenzufassen. Dies kann den Code in Module gemäß den Problemen mit Geschäftsdomänen trennen und dann die Abhängigkeit des Moduls verwenden, um den zugehörigen Modulinhalt zu injizieren, damit wir den Fokus besser "trennen" und einen besseren "hohen Zusammenhalt und eine niedrige Kopplung" erreichen können. "Hoher Zusammenhalt und niedrige Kopplung" stammt aus dem Prinzip des objektorientierten Designs. Zusammenhalt bezieht sich auf die Integrität des Moduls oder Objekts. Eine Reihe von eng verwandten Logik sollte in demselben Modul, Objekt und anderen Codeeinheiten eingekapselt werden, anstatt überall verstreut zu sein. Die Kopplung bezieht sich auf den Abhängigkeitsgrad zwischen Modulen, Objekten und anderen Codeeinheiten. Wenn die Modifikation eines Moduls das andere Modul beeinflusst, bedeutet dies, dass die beiden Module voneinander abhängig und eng gekoppelt sind.
Gleichzeitig ist das Modul auch der Eingang zu unserem Winkelcode. Zuerst müssen Sie das Modul deklarieren, und dann können Sie andere Komponentenelemente in Angular definieren, z. B. Controller, Service, Filter, Anweisungen, Konfigurationscodeblock, Codeblock ausführen, usw.
Die Definition des Moduls lautet: angular.module ('com.ngbook.demo', []). In Bezug auf die Modulfunktion können drei Parameter übergeben werden, und sie sind:
Für die Angular.module -Methode haben wir gemeinsame Methoden, nämlich Angular.module ('com.ngbook.demo', [optionale Abhängigkeit]) und Angular.module ('com.ngbook.demo'). Beachten Sie, dass es eine völlig andere Art ist, eine, das Erstellungsmodul und das andere das deklarierte Modul zu erhalten. In der Anwendung sollte die Erklärung des Moduls und nur einmal sein; Um das Modul zu erhalten, kann es mehrmals sein. Es wird empfohlen, die Winkelkomponenten in verschiedenen Dateien zu trennen, Modul in der Moduldatei zu deklarieren und andere Komponenten ein Modul einführen. Es ist zu beachten, dass wir bei der Einführung in Verpackungen oder Skript die Moduldeklarationsdatei zuerst laden und dann andere Komponentenmodule laden müssen.
In der eckigen chinesischen Gemeinschaftsgruppe höre ich manchmal einige Schüler nach "NG: AreQ" -Fehlern:
[Ng: AreQ] Argument 'Democtrl' ist keine Funktion, wurde undefiniert!
Dies liegt häufig daran, dass Sie vergessen, den Controller mehrmals zu definieren oder das Modul zu deklarieren. Das mehrmalige Deklonieren des Moduls führt dazu, dass die vorherigen Informationen zur Moduldefinition gelöscht werden, sodass das Programm die definierten Komponenten nicht ermittelt. Wir können dies auch aus dem Winkelquellcode (von lader.js) lernen:
Funktion SetUpModuleleloLoder (Fenster) {... Funktion sicherstellen (OBJ, Name, Fabrik) {return obj [name] || (obj [name] = factory ()); } var Angular = sicher (Fenster, 'Angular', Objekt); return scon (angular, 'modul', function () {var modules = {}; Rückgabefunktionsmodul (Name, Erforderlich, configFn) {var assertnothasownProperty = Funktion (Name, Kontext) {if (name === 'HaSownProperty') {throw ngminr. AssertnothasownProperty (Name, Modul '); If registering a module ensure that you " + "specify the dependencies as the second argument.", name); } var invokeQueue = []; var runBlocks = []; var config = invokeLater('$injector', 'invoke'); var moduleInstance = { _invokeQueue: invokeQueue, _runBlocks: runBlocks, requires: requires, name: name, provider: invokeLater('$provide', 'provider'), factory: invokeLater('$provide', 'factory'), service: invokeLater('$provide', 'service'), value: invokeLater('$provide', 'value'), constant: invokeLater('$provide', 'constant', 'unshift'), animation: invokeLater('$animateProvider', 'register'), filter: Invokelater ('$ filterProvider', 'Register'), Controller: Invokelater ('$ controllerProvider', 'Register'), Richtlinie: Invokelater ('$ compileProvider', 'Richtlinie'), config: config: function (block) {runblocks.push; function InvoKelater (Anbieter, InsertMethod) {return function () {InvokeQueue [InsertMethod || '] (Anbieter, Argumente]); }; }); }Im Code können wir verstehen, dass Angular beim Starten eines globalen Angular -Objekts und dann die Modul -API auf dem Winkelobjekt veröffentlichen. In Bezug auf den Modul -API -Code können Sie deutlich die erste Zeile der Prädikatanweisung sehen. Der Modulname kann nicht nach HasownProperty benannt werden, andernfalls wird eine Fehlermeldung von "Badname" geworfen. Wenn ein Name -Parameter übergeben wird, der angibt, dass ein Modul deklariert wird, werden die vorhandenen Modulinformationen gelöscht und auf Null gesetzt.
Aus der Definition von Moduleinstance können wir sehen, dass die von Angular entlarvt von Angular.module: Invokequeue, RunBlocks, benötigt, Name, Anbieter, Fabrik, Dienst, Wert, Konstant, Animation, Filter, Controller, Richtlinie, Konfiguration und Run. Unter ihnen sind Invokequeue und Runblocks private Attribute, die namentlich vereinbart sind. Bitte benutze sie nicht nach Belieben. Andere APIs sind die häufig verwendeten Winkelkomponenten -Definitionsmethoden. Aus dem Invokelater -Code können Sie feststellen, dass die Rückgabe solcher Winkelkomponentendefinitionen immer noch eine Moduleinstanzinstanz ist, die eine glatte API bildet. Es wird empfohlen, Kettendefinitionen zu verwenden, um diese Komponenten zu definieren, anstatt eine globale Modulvariable zu deklarieren.
Wenn der dritte Parameter configFN übergeben wird, wird er schließlich in die Konfigurationsinformationen konfiguriert. Wenn der Angular in die Konfigurationsstufe eingeht, werden sie wiederum ausgeführt, um die Winkelanwendung oder Winkelkomponenten wie Service vor der Instanziierung zu konfigurieren.
Das obige ist eine Kompilierung der Anweisung des Winkelmoduls und der überlasteten Informationen. Wir werden in Zukunft weiterhin relevante Informationen hinzufügen. Vielen Dank für Ihre Unterstützung für diese Website!