2017-06-22 7 views
0

kann mir jemand mit diesem Code helfen? Ich habe Problem mit Rückgabewert, Funktion in der Steuerung Rückkehr nurAngularJS Service liefert keinen Wert von http.get

var products = {"id": 3}; 

ich von http.get sammeln Wert will, kann mir jemand sagen, wie das zu tun ?? Controller:

$scope.product = {}; 
$scope.init = function() { 
    $scope.loadProducts() 
} 

$scope.loadProducts = function() { 
    // $http.get("/products/list").then(function (resp) { 
    // $scope.products = resp.data; 
    // }) 
    $scope.products = getListProducts.loadProducts(); 
} 

Dienst

var myServices = angular.module('myServices', []); 
myServices.service('getListProducts', ['$http', function ($http) { 
var products = {"id": 3}; 
this.loadProducts = function() { 
    $http.get("/products/list").then(function (resp) { 
     products = resp.data; 
    }) 
    return products; 
} 
}]); 
+1

Mögliches Duplikat von [Wie gebe ich die Antwort von einem asynchronen Anruf zurück?] (Https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous- Anruf) –

+0

* Keine gültige URL *? –

Antwort

0

Sie Produkte vor http Erfolg zurückkehren, anstatt Versprechen verwenden und lösen, wenn http Erfolg

$scope.product = {}; 
$scope.init = function() { 
    $scope.loadProducts() 
} 

$scope.loadProducts = function() { 
    // $http.get("/products/list").then(function (resp) { 
    // $scope.products = resp.data; 
    // }) 
    $scope.productPromise = getListProducts.loadProducts(); 
     productPromise..then(function (resp) { 
     $scope.products = resp.data; 
    }); 
} 

Dienst

var myServices = angular.module('myServices', []); 
myServices.service('getListProducts', ['$http', function ($http) { 
var products = {"id": 3}; 
this.loadProducts = function() { 
    return $http.get("/products/list"); 

} 
}]); 
0

Nutzen Sie die Versprechen, die Serialisierung Ihres Async-Codes zu erzwingen.

Refaktorieren Service-Methode als:

this.loadProducts = function() { 
    var getProducts = new Promise(function(resolve,reject){ 
     $http.get("/products/list").then(function (resp) { 
      resolve(resp.data); 
     }) 
    }); 
    return getProducts; 
}; 

Und der Controller-Methode als:

getListProducts.loadProducts().then(function(data){ 
    //success callback 
    $scope.products = data; 
}); 

Sie auch die Fehler Rückrufe zur Verfügung stellen kann. Hoffe, das hilft!

0

Sie sollten Versprechen verwenden, um Werte von Ihrem Service zurückzugeben. Sie können $q in Ihrem Service verwenden. Es würde Funktionen helfen, asynchron zu laufen.

myServices.service('getListProducts', ['$http','$q', function ($http,$q) { 
    var products = {"id": 3}; 
    this.loadProducts = function() { 
    var deferred = $q.defer(); 

    $http.get("/products/list").then(function (resp) { 
     products = resp.data; 
     deferred.resolve(products); 
    },function(error){ 
     deferred.reject(error); 
    }); 
    return deferred.promise; 
} 
}]); 

und Ihre Methode in der Steuerung sollte success und error Rückrufe Griff:

$scope.loadProducts = function() { 

getListProducts.loadProducts().then(function(response){ 
    $scope.products=response; 
},function(error){ 
    //your processing logic 
}); 
} 

Ich hoffe, das Ihnen helfen würde.

Verwandte Themen