El módulo es una forma importante de organizar módulos en angular. Proporciona la capacidad de encapsular un conjunto de componentes comerciales cohesivos (controlador, servicio, filtro, directiva ...). Hacerlo puede separar el código en módulos de acuerdo con los problemas de dominio comercial y luego usar la dependencia del módulo para inyectar su contenido de módulo asociado, para que podamos "separar mejor el enfoque" y lograr una mejor "alta cohesión y bajo acoplamiento". "Alta cohesión y bajo acoplamiento" proviene del principio del diseño orientado a objetos. La cohesión se refiere a la integridad del módulo u objeto. Un conjunto de lógica estrechamente relacionada debe encapsularse en el mismo módulo, objeto y otras unidades de código, en lugar de dispersarse en todas partes; El acoplamiento se refiere al grado de dependencia entre módulos, objetos y otras unidades de código. Si la modificación de un módulo afectará al otro módulo, significa que los dos módulos son interdependientes y estrechamente acoplados.
Al mismo tiempo, el módulo también es la entrada a nuestro código angular. Primero, debe declarar el módulo, y luego puede definir otros elementos de componentes en Angular, como controlador, servicio, filtro, directiva, bloque de código de configuración, bloque de código de ejecución, etc.
La definición de módulo es: angular.module ('com.ngbook.demo', []). Con respecto a la función del módulo, se pueden pasar tres parámetros y son:
Para el método angular.module, tenemos métodos comunes, a saber, angular.module ('com.ngbook.demo', [dependencia opcional]) y angular.module ('com.ngbook.demo'). Tenga en cuenta que es una forma completamente diferente, una es declarar el módulo de creación, y el otro es obtener el módulo declarado. En la aplicación, la declaración del módulo debe ser y solo una vez; Para obtener el módulo, puede ser varias veces. Se recomienda separar los componentes angulares en diferentes archivos, declarar el módulo en el archivo del módulo y otros componentes introducen el módulo. Cabe señalar que al introducirlo en empaque o script, debemos cargar primero el archivo de declaración del módulo y luego cargar otros módulos de componentes.
En el Grupo de la Comunidad China Angular, a veces escucho a algunos estudiantes preguntando sobre los errores "NG: AROQ":
[ng: areq] argumento 'Democtrl' no es una función, ¡no se define!
Esto a menudo se debe a que olvida definir el controlador o declarar el módulo varias veces. Declarar el módulo varias veces hará que se borre la información de definición del módulo anterior, por lo que el programa no encontrará los componentes definidos. También podemos aprender esto del código fuente angular (de loader.js):
función setUpModuleLoader (Window) {... Función Asegurar (obj, nombre, fábrica) {return obj [name] || (obj [nombre] = factory ()); } var angular = asegurar (ventana, 'angular', objeto); return Asegue (angular, 'módulo', function () {var modules = {}; return Function Module (name, requiera, configfn) {var afirmoNthasownProperty = function (name, context) {if (name === 'ASOWNPROPERTY') {tirar ngMinerr ('BadName', 'hawnProperty no es un {0 {0} n. afirmarnothasownproperty (nombre, 'módulo'); 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 ('$ proporcion', 'proveedor'), fábrica: invokeLater ('$ proporcionar', 'fábrica'), servicio: invokelater ('$ proporcion Invokelater ('$ FilterProvider', 'Registro'), Controlador: InvokeLater ($ ControllerProvider ',' Invokelater (Provider, Método, InsertMethod) {Función de retorno () {Invokequeue [InsertMethod || }; }); }En el código, podemos entender que cuando se inicia angular, configurará un objeto angular global y luego publicará la API del módulo en el objeto angular. Con respecto al código API del módulo, puede ver claramente la primera línea de la declaración de predicado. El nombre del módulo no puede llevarse el nombre de ASOWNProperty, de lo contrario, se arrojará un mensaje de error de "BadName". Inmediatamente después, si se pasa un parámetro de nombre, lo que indica que se declara un módulo, la información del módulo existente se eliminará y se establecerá en NULL.
A partir de la definición de ModuleInstance, podemos ver que las API expuestas por Angular.Module son: Invokequeue, RunBlocks, requiere, Nombre, Proveedor, Fábrica, Servicio, Valor, Constante, Animación, Filtro, Controlador, Directiva, Configuración y Run. Entre ellos, Invokequeue y Runblocks son atributos privados acordados por el nombre. No los use a voluntad. Otras API son los métodos de definición de componentes angulares comúnmente utilizados. Desde el código de Invokelater, puede ver que la devolución de tales definiciones de componentes angulares sigue siendo una instancia de módulo de módulo, que forma una API suave. Se recomienda utilizar definiciones de cadena para definir estos componentes en lugar de declarar una variable de módulo global.
Finalmente, si se pasa el tercer parámetro configN, se configurará en la información de configuración. Cuando el angular ingrese a la etapa de configuración, se ejecutará a su vez para configurar la aplicación angular o los componentes angulares como el servicio antes de la instancia.
Lo anterior es una compilación de la declaración del módulo angular y la información obtenida sobrecargada. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio web!