2016-07-01 2 views
0

У меня есть завод, который я не могу редактировать:завод в службе

factory('UsersForAnimale', ['$q', '$http',function($q, $http) { 
var getUsers = function() { 
    var deferred = $q.defer(); 

    $http.get('ServerRest/users-for-animale.php') 
     .success(function(data) { 
      deferred.resolve(data); // Successo: risolvo la promise 
     }) 
     .error(function(reason) { 
      deferred.reject(reason); // Errore: rigetto la promise 
     }); 

    return deferred.promise; // Restituisco una promise 
} 

return { 
    getUsers: getUsers 
}; 

}]);

Я создал службу, потому что я хочу, чтобы попытаться манипулировать результат:

.service('ContatoreUtentiAndPromise', ['UsersForAnimale',function(UsersForAnimale) 
{ 

    var Numero = 0; 

    this.getNumber = function() 
    { 
     UsersForAnimale.getUsers().then(function(data) 
     { 
      this.Numero = data.length; 
      console.log("Numero="+this.Numero); 

      this.Numero = this.Numero+10; 

      return this.Numero; 

     }); 



    } 

}]); 

Консоли не показать мне правильное значение, но контроллер шоу ничего.

.controller('ListaUtentiContaConSapInBoxCtrl', ['ContatoreUtentiAndPromise','$scope','$q', function (ContatoreUtentiAndPromise,$scope,$q) 
{ 

    $scope.numeroUtenti=ContatoreUtentiAndPromise.getNumber(); 


}]); 

Интересно, где я ошибаюсь

ответ

1

Вы должны вернуть обещание от вашего метода обслуживания, так как фабричный метод является асинхронным:

this.getNumber = function() { 
    return UsersForAnimale.getUsers().then(function(data) { 
     this.Numero = data.length; 
     console.log("Numero="+this.Numero); 

     this.Numero = this.Numero+10; 

     return this.Numero; 
    }); 
} 

, а затем использовать его таким образом:

ContatoreUtentiAndPromise.getNumber() 
.then(function(num) { 
    $scope.numeroUtenti = num; 
}); 
+0

Отлично! Большое спасибо! – Researcher

Смежные вопросы