Módulo AngularJS
Esse capítulo aborda a criação de um módulo AngularJS completo, contendo controlador, serviço CRUD e interface para listagem, criação, modificação e deleção de objetos de uma entidade.
A implementação abordada é continuação do plugin criado no capítulo anterior. O CRUD será em cima da entidade Item.
Antes da abordagem da implementação do módulo em si, vamos criar uma base para testes. Uma rota /meu-plugin/itens, um arquivo de visão e um template part com o template angular da listagem.
// arquivo Controllers/MeuPlugin.php
function GET_itens () {
$this->requireAuthentication();
$this->render('items');
}Esqueleto do Módulo
Primeiro, deve-se criar um arquivo JS com o esqueleto do módulo contendo controller e service vazios. É necessário modificar o conteúdo das requisições para que o Angular não envie um JSON no corpo da requisição, pois o Slim não vai parsear corretamente.
Enfileirando Arquivo JS
Com o arquivo JS do módulo criado, é necessário que ele seja incluído na visão. Isto pode ser feito de diferentes maneiras, mas para este exemplo, faremos o enfileiramento no próprio arquivo do template part:
Chamando o Módulo no Template
O AngulaJS precisa de um elemento com a diretiva ng-app que indica qual o módulo principal da página. Como utilizaremos o módulo numa nova rota que ainda não tem nenhum ng-app definido, colocaremos a propriedade na tag com a classe main-content:
Definido o ng-app, podemos chamar o controlador no arquivo do template part colocando a diretiva ng-controller na div que envolve o ul:
Listando Itens
Vamos primeiro colocar no controller alguns itens fakes no objeto $scope.data para utilizarmos na listagem:
Em seguida, fazemos a iteração no template utilizando a diretiva ng-repeat na tag li:
Para testar a listagem é necessário, nesse ponto, inserir algumas entradas na tabela item.
Recuperando Itens do Banco de Dados
Vamos implementar uma função no serviço que consulta a API de busca da entidade item:
Em seguida, removemos os itens fakes do array de itens, implementamos função no controlador que chama a função find do serviço e chamamos essa função no controller para trazer os itens da API:
Inserindo Itens
No serviço, criamos uma função insert que faz uma requisição POST em /item:
No controlador, adicionamos uma propriedade para guardar o título do novo item, criamos uma função que utiliza essa variável para criar um item e enviar para o serviço:
Antes da listagem, adicionamos um formulário para criação de novo item:
Deletando Itens
No serviço, criamos uma função remove que faz uma requisição http do tipo DELETE para /item/single/{id}.
No controlador, criamos uma função $scope.removeItem que chama a função remove do serviço:
E, chamamos ela no click do link remover:
Modificando Itens
No serviço, criamos uma função update que faz uma requisição http do tipo PUT para /item/single/{id}:
No controlador, adicionamos uma nova chave no $scope.data para guardar uma cópia do item que será editado.
E, adicionamos duas funções no $scope, a primeira que faz a cópia do objeto e a segunda que salva o objeto copiado.
No template, modificamos o conteúdo da tag li adicionando um formulário e um link para edição que chama a função $scope.editItem. Esta, faz uma cópia do item para o $data.editItem fazendo com que a condição para exibição do formulário seja verdadeira e que assim, o formulário é exibido:
Adicionando Campo de Busca
Como já havíamos possibilitado as buscas no método find do serviço, só precisamos modificar o controlador e o template.
No controlador adicionamos uma nova chave no objeto $scope.data para guardar o termo buscado, além de uma função que efetua a busca:
No template colocamos um formulário para a busca:
Incluindo Módulo em Outras Páginas
@todo
Last updated
Was this helpful?