2017-06-22 83 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 
}); 
} 

我希望这会帮助你。