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?