Eu tenho todos os meus controladores AngularJS em um arquivo, controllers.js. Este arquivo está estruturado da seguinte maneira:
angular.module('myApp.controllers', [])
.controller('Ctrl1', ['$scope', '$http', function($scope, $http) {
}])
.controller('Ctrl2', ['$scope', '$http', function($scope, $http) }
}])
O que eu gostaria de fazer é colocar Ctrl1 e Ctrl2 em arquivos separados. Eu incluiria os dois arquivos no meu index.html, mas como isso deve ser estruturado? Tentei fazer algo assim e ele gera um erro no console do navegador dizendo que não consegue encontrar meus controladores. Alguma dica?
Pesquisei no StackOverflow e encontrei essa pergunta semelhante - no entanto, essa sintaxe está usando uma estrutura diferente (CoffeeScript) no topo do Angular, e por isso não consegui segui-lo.
fonte
appCtrl
é um globalwindow.appCtrl
. Essa não é uma boa prática.O uso da API angular.module com uma matriz no final indicará ao angular para criar um novo módulo:
myApp.js
Usá-lo sem a matriz é na verdade uma função getter. Portanto, para separar seus controladores, você pode:
Ctrl1.js
Ctrl2.js
Durante as importações de javascript, verifique se o myApp.js está atrás do AngularJS, mas antes de qualquer controlador / serviço / etc ... caso contrário, o angular não poderá inicializar seus controladores.
fonte
Embora ambas as respostas sejam tecnicamente corretas, quero apresentar uma opção de sintaxe diferente para esta resposta. Esse imho facilita a leitura do que está acontecendo com a injeção, a diferenciação entre etc.
Arquivo Um
Arquivo dois
Arquivo três
fonte
E essa solução? Módulos e controladores em arquivos (no final da página) Funciona com vários controladores, diretivas e assim por diante:
app.js
myCtrl.js
html
O Google também possui recomendações de práticas recomendadas para a estrutura angular de aplicativos que eu realmente gosto de agrupar por contexto. Nem todo o html em uma pasta, mas, por exemplo, todos os arquivos para login (html, css, app.js, controller.js e assim por diante). Portanto, se eu trabalhar em um módulo, todas as diretivas serão mais fáceis de encontrar.
fonte
Para resumir, aqui está uma amostra do ES2015 que não depende de variáveis globais
fonte
name
.. então você pode simplesmente usar emExampleCtrl.name
vez de duplicar .. triplicar.Não é tão elegante, mas muito simples na solução de implementação - usando variável global.
No "primeiro" arquivo:
no "segundo", "terceiro", etc:
fonte
angular.module('myApp').controller('ProductCtrl', ['$scope', '$http', function($scope, $http){ //Your ProductCtrl code goes here }]);