O módulo é uma maneira importante de organizar módulos em angular. Ele fornece a capacidade de encapsular um conjunto de componentes de negócios coesos (controlador, serviço, filtro, diretiva ...). Isso pode separar o código nos módulos de acordo com os problemas do domínio dos negócios e, em seguida, usar a dependência do módulo para injetar seu conteúdo de módulo associado, para que possamos melhor "separar o foco" e obter melhor "alta coesão e baixo acoplamento". "Alta coesão e baixo acoplamento" vem do princípio do design orientado a objetos. Coesão refere -se à integridade do módulo ou objeto. Um conjunto de lógica intimamente relacionada deve ser encapsulada no mesmo módulo, objeto e outras unidades de código, em vez de espalhadas por toda parte; O acoplamento refere -se ao grau de dependência entre módulos, objetos e outras unidades de código. Se a modificação de um módulo afetará o outro módulo, significa que os dois módulos são interdependentes e fortemente acoplados.
Ao mesmo tempo, o módulo também é a entrada do nosso código angular. Primeiro, você precisa declarar o módulo e, em seguida, pode definir outros elementos componentes no Angular, como controlador, serviço, filtro, diretiva, bloco de código de configuração, bloco de código de execução etc.
A definição de módulo é: angular.module ('com.ngbook.demo', []). Em relação à função do módulo, três parâmetros podem ser passados e são:
Para o método angular.Módulo, temos métodos comuns, como angular.module ('com.ngbook.demo', [dependência opcional]) e angular.module ('com.ngbook.demo'). Observe que é uma maneira completamente diferente, uma é declarar o módulo de criação e o outro é obter o módulo declarado. Na aplicação, a declaração do módulo deve ser e apenas uma vez; Para obter o módulo, ele pode ser várias vezes. Recomenda -se separar os componentes angulares em diferentes arquivos, declarar módulo no arquivo de módulo e outros componentes introduzem o módulo. Deve -se notar que, ao introduzi -lo em embalagem ou script, precisamos carregar o arquivo de declaração do módulo primeiro e, em seguida, carregar outros módulos de componentes.
No Grupo Comunitário Chinês Angular, às vezes ouço alguns alunos perguntando sobre erros de "NG: AREQ":
[ng: areq] argumento 'democtrl' não é uma função, foi indefinido!
Isso geralmente ocorre porque você esquece de definir o controlador ou declarar o módulo várias vezes. A declaração do módulo várias vezes fará com que as informações de definição de módulo anterior sejam limpas, para que o programa não encontre os componentes definidos. Também podemos aprender isso com o código -fonte angular (do carregador.js):
Função setupModuleLoader (Window) {... função garantir (obj, nome, fábrica) {return obj [nome] || (obj [nome] = fábrica ()); } var angular = garantir (janela, 'angular', objeto); Retorne, verifique (angular, 'módulo', function () {var modules = {}; retorna o módulo da função (nome, requer, configfn) {var assertnoThasownProperty = function (name, context) {if (name === 'hasOwnProperty') {throw ngminer ('badname', '' '' '' '; AssertnoThasownProperty (Nome, 'Module'); Carregue -o. 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'), Filtro: Invokelater ('$ filterProvider', 'Register'), controlador: Invocador ('$ controlador', 'Register'), Diretiva: Invokelater ('$ compilePile') ModuleInStance; }; }); }No código, podemos entender que, quando o Angular for iniciado, ele configurará um objeto angular global e publicará a API do módulo no objeto angular. Em relação ao código da API do módulo, você pode ver claramente a primeira linha de instrução predicada. O nome do módulo não pode ser nomeado após o HasOwnProperty, caso contrário, uma mensagem de erro de "Badname" será lançada. Imediatamente depois, se um parâmetro de nome for passado, o que indica que um módulo é declarado, as informações do módulo existente serão excluídas e definidas como nulas.
A partir da definição de ModuleInstance, podemos ver que as APIs expostas pelo Angular.Module são: Invokeue, RunBlocks, requer, nome, provedor, fábrica, serviço, valor, constante, animação, filtro, controlador, diretiva, config e execução. Entre eles, Invokequeue e Runblocks são atributos privados acordados pelo nome. Por favor, não os use à vontade. Outras APIs são os métodos de definição de componentes angulares comumente usados. A partir do código Invocelater, você pode ver que o retorno dessas definições de componentes angulares ainda é uma instância do módulo, que forma uma API suave. Recomenda -se usar definições de cadeia para definir esses componentes em vez de declarar uma variável de módulo global.
Finalmente, se o terceiro parâmetro configfn for passado, ele será configurado nas informações de configuração. Quando o angular entra no estágio de configuração, eles serão executados, por sua vez, para configurar a aplicação angular ou componentes angulares, como serviço antes da instanciação.
O exposto acima é uma compilação da instrução MODULE ANGLULE e as informações obtidas sobrecarregadas. Continuaremos a adicionar informações relevantes no futuro. Obrigado pelo seu apoio a este site!