...
| Itens | Nome | Descrição |
|---|---|---|
| 1 | Recipients | Services, factories e providers são componentes disponibilizados pela arquitetura que expoem métodos públicos e são passíveis de injeção de dependências. |
| 2 | Directives | Directives são como uma extensão do HTML na forma de atributos anexados nestes elementos. Diretivas utilizam-se de services, factories, providers e eventos para comunicar-se e realizar suas funções. |
| 3 | Partials | Partials são páginas HTML que podem ser incorporadas em outras páginas através da directive ng-include. Todas as páginas de list e detail da arquitetura são partials que compoem a estrutura HTML da aplicação. |
| 4 | Controllers | Controllers interagem com as partials e controlam itens de escopo e diretivas. Métodos e regras de negócio são expostos para as partials através de controllers. |
| 5 | Scopes | Scopes formam a cola entre controllers e directives. Para expor um método para uma diretiva, este método deve estar declarado dentro de um escopo. Cada controller possui um escopo. |
Recipients
Recipients é um termo utilizado na documentação do framework AngularJS para referir-se a um agrupador contendo os componentes: service, factory e provider. Os componentes deste agrupador são abordado no decorrer desta seção.
O que é um Service?
| Âncora | ||||
|---|---|---|---|---|
|
...
| Informações | ||
|---|---|---|
| ||
A arquitetura não faz uso de services, apenas factories e providers. Apesar de não utilizarmos ser utilizado internamente na arquitetura, registrar e fazer uso de services é um conceito importante que você pode necessitar no dia-a-dia. Não deixe de ler esta seção, a não ser que você já conheça estas operações. |
...
pode ser aplicado nesta camada. |
São objetos que compartilham funcionalidades através de APIs públicas para toda aplicação que faz uso do AngularJS. Services fornecem injeção de dependência e padronização quanto a criação de APIs públicas.
...
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
shieldModule// aqui o service com nome DateUtil (primeiro parâmetro na chamada da função service()) é registrado no módulo treelayer.commons.ui.util angular.module('treelayer.commons.ui.util').service( 'DateUtil', function() { this.format = function( date ) { new Date(date).format('dd-mm-yyyy'); }; }); shieldModule// em um modulo que depende do commons (shieldApp no caso da aplicação Shield) o componente DateUtil é injetado // em um controller através do array de string (segundo argumento da função controller()) onde este argumento // deve conter o nome que o componente foi registrado, ou seja, 'DateUtil' shieldApp.controller( 'PeriodController', [ 'DateUtil', '$scope', function( DateUtil, scope ) { // ... // metodo chamado para formatar a data escolhida em um widget calendar scope.formatCurrentDate = function(date) { scope.formattedDate = DateUtil.format(date);date); // utilização do service DateUtil }; }]); |
Note a forma que declaramos a função format no service acima. Internamente, ao declarar um service, a função retornada será instanciada apenas quando necessário (lazy). Esta instanciação dá-se chamando construtor da função através do operador new. Services são estruturas simples, expoem métodos declarados no contexto (variável implícita this) e serão instanciados pelo AngularJS a partir de um construtor padrão. São utilizados quando não há necessidade de manter estado nos objetos e/ou criar objetos que necessitam de parâmetros para sua instanciação.
O que é um Factory?
| Âncora | ||||
|---|---|---|---|---|
|
O que é um Factory?
Assim como o service, factories também são objetos que compartilham interfaces públicas de API e são passíveis a injeção de dependências.
Factories são registradas através da Module API . Ao registrar uma factory, dá-se um nome no qual será utilizado para injeção de dependências em quaisquers outros componentes do AngularJS. Abaixo temos um exemplo de como registrar uma factory e como utiliza-la através da injeção de dependências.
...
| theme | Eclipse |
|---|---|
| language | js |
| title | Registrando e Utilizando Factories |
| linenumbers | true |
dependências.
| Bloco de código | ||||||||
|---|---|---|---|---|---|---|---|---|
| ||||||||
// aqui a factory com nome $dialog(primeiro parâmetro na chamada da função service()) é registrada no módulo treelayer.commons.ui angular.module('treelayer.commons.ui').factory('$dialog', function() { var Dialog = function(isOpen, operation) { this.isOpen = isOpen ? isOpen : false; this.operation = operation ? operation : ''; }; Dialog.prototype.close = function() { this.isOpen = false; this.operation = ''; }; Dialog.prototype.open = function(op) { this.isOpen = falsetrue; if (op) this.operation = ''op; }; return { Dialog.prototype.open = 'new': function(opisOpen, operation) { return new Dialog(isOpen, operation); this.isOpen = true; if (op) this.operation = op; }; return { 'new': function(isOpen, operation) { return new Dialog(isOpen, operation); } }; }); } }; }); // em um modulo que depende do commons (shieldModule no caso da aplicação Shield) o componente $dialog é injetado // em um controller através do array de string (segundo argumento da função controller()) onde este argumento // deve conter o nome que o componente foi registrado, ou seja, '$dialog' shieldApp.controller( 'PeriodCtrl', ['$scope$dialog', '$http', '$property', '$resourceLocator', '$dialog$scope', function ( $scopeDialog, $http, $property, $resourceLocator, $dialog scope ) { // ... $scope.view = { // ... detailDialog: $dialogDialog.new() // ... utilização da factory $dialog }; // ... }]); |
Note a forma que declaramos a função foo na factory acima. Internamente, ao declarar uma factory, a função foo já esta instanciada e apenas será executada, diferentemente do service onde uma nova função será instanciada através do operador new. A factory $dialog oferece um método público new que constroi uma nova instância do objeto Dialog. Factories fornecem mais flexibilidade na sua instanciação, possibilitando a construção de objetos que possuam parametro, por isso, em casos como mostrado no exemplo acima são preferíveis ao invés de services.
| Informações | ||
|---|---|---|
| ||
Acesse o código-fonte da factory |
O que é um Provider?
| Âncora | ||||
|---|---|---|---|---|
|
...
Providers, assim como services e factories provem interfaces públicas e são passíveis de dependência. Diferentemente destes outros componentes, providers são expostos antes da inicialização da aplicação. Este atributo fornece aos providers um mecanismo de configuração, tornando-os uteis onde o comportamento de seus métodos públicos diferem conforme a configuração realizada em um bloco de inicialização do AngularJS.
...