工厂服务

时间:2016-07-01 08:15:11

标签: angularjs service factory

我有一个我无法编辑的工厂:

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 个答案:

答案 0 :(得分:1)

您应该从服务方法返回promise,因为factory方法是异步的:

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;
});