Problems calling to my service

When i call to service getRecibidos on services.js, mensajes’s variable is undefined when app started but when click button recibidos or enviados runs ok. Why?? I would like to take the mensajes when i start the application.

.controller(‘MensajesCtrl’, function ($scope, Mensajes, General, Perfil, myConfig, $http) {

var idUsuarioLogado = Perfil.getIdUsuario();

$scope.mensajes = Mensajes.getRecibidos(idUsuarioLogado); // $scope.mensajes is empty at start application

$scope.btn_rec_selected = ‘button-positive’;
$scope.btn_env_selected = ‘’;

$scope.recibidos = function () {
// Si estamos en enviados, cambia a recibidos
if ($scope.btn_rec_selected == ‘’) {
$scope.btn_rec_selected = ‘button-positive’;
$scope.btn_env_selected = ‘’;
$scope.mensajes = Mensajes.getRecibidos(idUsuarioLogado);
}
};

$scope.enviados = function () {
// Si estamos en recibidos, cambia a enviados
if ($scope.btn_env_selected == ‘’) {
$scope.btn_env_selected = ‘button-positive’;
$scope.btn_rec_selected = ‘’;
$scope.mensajes = Mensajes.getEnviados(idUsuarioLogado);
}
};
})

Can you show us Mensajes and Perfil service?

Or even better, can you do a codepen?

1 Like

// ######################################################################################
// Mensajes
// ######################################################################################

.factory(‘Mensajes’, function (myConfig, $http, $ionicPopup, Perfil) {
var mensajes = [];

function doGetMensajes(idusuario) {

var URL = myConfig.backend + 'mensajes';
var params = {
  id: 1, // TODO: cambiar por idusuario
};

console.log('Llamada servicio de mensajes: ' + URL + '\nParams: ' + JSON.stringify(params));
$http({
  url: URL,
  method: 'GET',
  params: params
})

.success(function (data) {
  mensajes = data;
})

.error(function (error, status) {

  
  // Revisar y poner estados correctos
  if (status == 404) {
    $ionicPopup.alert({
      title: 'Error accediendo al servidor',
      template: 'No ha sido posible acceder al servidor '
    });
  } else {
    $ionicPopup.alert({
      title: 'Error accediendo al servidor',
      template: 'No ha sido posible acceder al servidor'
    });
  }
});

}

return {
all: function () {
return mensajes;
},
get: function (mensajeId) {
return (mensajes[mensajeId])
for (var i = 0; i < mensajes.length; i++) {
if (mensajes[i].id === parseInt(mensajeId)) {
return mensajes[i];
}
}
return null;
},
getRecibidos: function (idusuario) {
doGetMensajes(idusuario);
var msjs = new Array();
for (var i = 0; i < mensajes.length; i++) {
if (mensajes[i].tipo == ‘R’) {
msjs.push(mensajes[i]);
}
}
return msjs;
},
getEnviados: function (idusuario) {
doGetMensajes(idusuario);
var msjs = new Array();
for (var i = 0; i < mensajes.length; i++) {
if (mensajes[i].tipo == ‘E’) {
msjs.push(mensajes[i]);
}
}
return msjs;
},
getFiltrados: function (anno, curso, area) {
for (var i = 0; i < mensajes.length; i++) {
if (mensajes[i].id === parseInt(mensajeId)) {
return mensajes[i];
}
}
return null;
}
}

})

Could this be related to view caching?

What if you try to put

$scope.mensajes = Mensajes.getRecibidos(idUsuarioLogado); // $scope.mensajes is empty at start 

Inside of

 $scope.$on('$ionicView.beforeEnter', function() {})

Oh Wait! you need to use promise in doGetMensajes, otherwise you return empty array from getRecibidos before $http call is returned

1 Like