Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Service fazendo cache do resultado

Eu tenho um controller chamado RotaController, que tem um service rotaService injetado. Esse service retorna uma lista, toda vez que eu navego para o RotaController via $location.path(), se o rotaService nunca foi executado, este executa normalmente e retorna o valor. Se rotaService já foi executado pelo menos uma vez, ele não executa e retorna o valor da primeira vez que foi executado. Fiz um teste dando f5 na página e o service executa normalmente.

Como faço para alterar esse comportamento ?

bem parecido com o código a seguir:

.controller('ListagemController', function($scope, CarroService){

    CarroService.obterCarros().then(function(dados){

      $scope.listaDeCarros = dados;
    });
});
angular.module('starter')
.service('CarroService', function($http){

    var url= 'https://aluracar.heroapp.com/';

    return{
      obterCarros : function (){
          return $http.get(url).then(function(response){
              return response.data;
            });
      }
    }
});
4 respostas

Tenta limpar o cache da view com a diretiva view-cache=false lá no ion-view

Bom dia.

Lazaro, já estava com essa anotação "view-cache=false" mas continua fazendo o cache.

Até na chamada $http.get adicionei o "cache : false" mas não funcionou.

$http.get(url, cache:false).then

Ajuda mais se eu explicar como o programa funciona. Depois do usuário fazer o login, ele entra automaticamente na "rota", Da "rota" ele escolhe uma opção, quando uma opção é escolhida ela cai em outra view, quando todos os parametros dessa view são preenchidos, o usuario encerra a atividade confirmando em um button que leva a um controller, quando o controller finaliza o processo, este retorna para "rota" por meio de um $state.go('rota') . Quando entra na "rota" o controller RotaController é acionado, chamando assim o RotaService que esta injetado. E como o RotaService já esta com o valor no cache ele nem entra executa.

solução!

Finalmente descobri o erro. Eu estava colocando a requisição http fora da função, exemplo:

angular.module('starter')
.service('CarroService', function($http){

 var url= 'https://aluracar.heroapp.com/';
 var promise = $http.get(url).then(function(response){
               return response.data;
 });
    return{
      obterCarros : function (){
          return promise;
      }
    }
});

Acredito que o problema ocorreu porque o Service é Singleton. Então fiz dessa maneira:

angular.module('starter')
.service('CarroService', function($http){

    var url= 'https://aluracar.heroapp.com/';

    return{
      obterCarros : function (){
          return $http.get(url).then(function(response){
              return response.data;
            });
      }
    }
});