2017-06-22 79 views
0

有人可以幫我使用這段代碼嗎?我在控制器返回與返回值的問題,函數只AngularJS服務不會返回來自http.get的值

var products = {"id": 3}; 

我想收集http.get值,可有人告訴我該怎麼做? 控制器:

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

服務

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

可能重複[如何從異步調用返回響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-打電話) –

+0

*沒有有效的網址*? –

回答

0

你退回產品的HTTP成功之前,改用承諾,並解決HTTP成功

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

服務

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

} 
}]); 
0

利用承諾來強制異步代碼的序列化。

重構您的服務方法爲:

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

而且你的控制器方法:

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

您可以提供錯誤回調也是如此。 希望這有助於!

0

您應該使用promise從服務中返回值。 您可以在您的服務中使用$q。它將幫助函數異步運行。

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

和你的控制器方法應該處理successerror回調:

$scope.loadProducts = function() { 

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

我希望這會幫助你。