Every time the user searches for the CPF, a connection with the server will be established, even if it is an already searched CPF and this is unnecessary, since this information can be stored on the client side.
What I suggest in the code below is that the CPF is included as an index of the contratos
array, which makes sense because currently each object within the contratos
array refers to a CPF and is precisely the duplication you want avoid:
$scope.contratos = [];
$scope.Pesquisar = function(){
//verifica se o CPF é um índice do array contratos
//e só faz um novo request se o CPF ainda não foi pesquisado.
if(typeof $scope.contratos[cpf] === 'undefined') {
$http.post('php/GetContratosProtocolo.php', {
'cpf':cpf
})
.success(function(data){
if(typeof data == 'object'){
//adiciona um novo elemento ao array utilizando o CPF como índice.
$scope.contratos[cpf] = data;
}else{
//adiciona na mesma o CPF no array de contratos, embora o resultado seja 'null', não deixa de ser uma resposta válida.
$scope.contratos[cpf] = null;
showerror('Contrato Não Encontrado')
}
})
.error(function(data){
console.log(data)
})
}
};
Then to extract the data from the array contratos
just make a forEach
:
$scope.contratos.forEach(function(value, key) {
//key = cpf utilizado como índice
//...
});