Descrição

O componente GumgaController foi desenvolvido como um substituto ao componente $populate. Sentimos que os desenvolvedores, ao utilizar o $populate, não entenderam muito bem o porquê do componente(talvez por causa do nome, também). Demos um passo atrás e chegamos neste componente que faz o que o $populate faz, porém funcionando também fora do $scope do controller, podendo ser colocado dentro de qualquer objeto. Este componente pode ser utilizado para criar os métodos que fazem conexão com o service GumgaREST, que podem ser utilizados para fazer a comunicação com o BackEnd, respeitando o modelo MVC do Angular. Além disse, ele tem suporte a eventos próprios, não necessitando do $scope.

Obs: Novo método createQuery() com ele é possível fazer ordanazações, filtros e páginação em uma única chamada, onde você pode usar o aq ou o gQuery.

Instalação

// npm
npm i gumga-controller-ng --save

// bower
bower install gumga-controller-ng --save

//Injeção do modulo
angular.module('yourApp', ['gumga.controller']);

<script src="node_modules/gumga-counter-ng/dist/gumga-controller.min.js"></script>
<script src="bower_components/gumga-counter-ng/dist/gumga-controller.min.js"></script>

Populando o controller

Quando você utiliza o gumga controller, ele cria seu escopo vários métodos que te ajudam na comunicação com o backend.
O controller depende de um serviço que seja um GumgaRest, sua documentação você encontra em https://gumga.github.io/gumga-rest-ng

No exemplo iremos conectar a um serviço de "cliente" para podermos fazer buscas, alterações, deleções etc...
Chame o método createRestMethods passando seu escopo, seu serviço e um nome na qual faremos a criação dos métodos.
angular.module('yourApp', ['gumga.controller'])
.service('ClienteService', function(GumgaRest){
  var service = new GumgaRest('http://www.minhaaplicacao.com.br/api/cliente');
  return service;
})
.controller('ctrl', function($scope, ClienteService, gumgaController){
  gumgaController.createRestMethods($scope, ClienteService, 'cliente');   
})
Perceba que como ultimo parâmetro passamos o valor "cliente", o gumga controller criará uma variável com esse nome informado dentro do seu escopo.
Após fazer a chamada do createRestMethods você já pode chamar os métodos criados.

Exemplo de uma chamada GET.
$scope.cliente.methods.get()

Filtrando, ordenando e páginando

$scope.pessoa.methods.createQuery() //Cria um QueryObject
.pageSize(10) //Quantidade de registros por página
.page(1) //Página que será buscado os registros
.sort('name', 'desc') //Ordenação dos registros
.gQuery(new GQuery(new Criteria('name', ComparisonOperator.CONTAINS, 'ma'))) //Filtro usando GQuery.
.send() //Faz a chamada ao backend.
.then(
  resp => {
    console.log(resp);
  },
  err => {
    console.log(err);
  }
)

Métodos criados pelo controller

Método Descrição Retorno
createQuery() A função createQuery é a função que te ajuda a criar um QueryObject, objeto que o backend espera para filtros ordenações etc... [QueryObject]
createRestMethods(container, service, config/id) A função createRestMethods é a função responsável pelo comportamento de criar os métodos do controlador. Ela cria um objeto que serve para agrupar os comportamentos. O objeto tem o seguinte formato [VOID]
post(value) Função responsável por fazer o post de um novo registro. [EVENT]
put(value) Função responsável por fazer o put de um registro. [EVENT]
get(params) O método get aceita um parâmetro params e retorna uma promise de uma chamada HTTP do tipo GET. [HttpPromise]
resetAndGet() O método resetAndGet reseta a query atual e performa uma chamada HTTP do tipo GET. [HttpPromise]
getById(id) O método getById aceita um parâmetro id e retorna uma promise de uma chamada HTTP do tipo GET. [HttpPromise]
getNew() O método resetAndGet reseta a query atual e performa uma chamada HTTP do tipo GET. [HttpPromise]
delete(data) O método delete recebe como parâmetro um objeto que será deletado. O objeto deve ter um parâmetro ID, que será passado para a url da chamada. [HttpPromise]
sort(field, way) O método sort recebe dois parâmetros para fazer a ordenação: field e way, que determinarão qual campo será ordenado e se será 'asc' ou 'desc'. [HttpPromise]
deleteCollection(array) O método deleteCollection aceita um parâmetro array e retorna uma promise de uma série de chamadas http do tipo DELETE que serão resolvidas ao mesmo tempo. [HttpPromise]
saveImage(attribute, data) O método saveImage aceita dois parâmetros attribute e data e retorna uma promise de de uma chamada HTTP POST FORM-DATA. [HttpPromise]
deleteImage(attribute, data) O método deleteImage aceita dois parâmetros url e data e retorna uma promise de de uma chamada HTTP DELETE FORM-DATA. [HttpPromise]
getSearch(field, param) O método getSearch aceita dois parâmetros field e param e retorna uma promise de uma chamada HTTP do tipo GET. [HttpPromise]
getAdvancedSearch(param) O método getAdvancedSearch aceita um parâmetro param e retorna uma promise de uma chamada HTTP do tipo GET. [HttpPromise]
redoSearch() O método redoSearch é usado para resgatar o estado do último query. [HttpPromise]
resetDefaultState() O método resetDefaultState retorna o objeto de query ao seu estado padrão. [HttpPromise]
saveQuery(query) O método saveQuery aceita um parâmetro query e retorna uma promise de uma chamada HTTP do tipo POST. [HttpPromise]
getQuery(page) O método getQuery aceita um parâmetro page e retorna uma promise de uma chamada HTTP do tipo GET. Este Parâmetro page é o valor de retorno do objeto location.hash disponível através do browser. É necessário este atributo para pegar apenas as queries relacionadas a página. As informações do usuário já são passadas através do token. [HttpPromise]
getSelectedTags(id) O método getSelectedTags aceita um parâmetro id e retorna uma promise de uma chamada HTTP do tipo GET. Este Parâmetro id é o identificador da entidade que está sendo editada. Este atributo é necessário para buscar apenas as tags que estão ligadas aquele registro. [HttpPromise]
getAvailableTags() O método getSelectedTags não necessita de parâmetros e retorna uma promise de uma chamada HTTP do tipo GET. [HttpPromise]