角度$ http在服务中,返回

时间:2013-09-17 13:59:05

标签: angularjs

我在工厂里有这个

productsFactory.getOneProduct = function(){
  $http({
    method: 'GET',
    url: '/api/products/' + $stateParams.productID
  }).
    success(function(data, status, headers, config){

      console.log(data);
      return data;
    }).
    error(function(data, status, headers, config){

    });
}

这是我的控制者:

$scope.selectedProduct = ProductsFactory.getOneProduct();

console.log(data)输出我想要的数据。但是当我从控制器调用它时,我得到“未定义”。猜猜它与从匿名函数返回有关吗?我做错了吗?

2 个答案:

答案 0 :(得分:2)

你的getOneProduct函数没有返回任何意味着它隐式返回undefined,因此错误。

$http返回一个承诺,您必须从您的函数返回该承诺。所以将代码更改为:

productsFactory.getOneProduct = function(){
  return $http({
    method: 'GET',
    url: '/api/products/' + $stateParams.productID
  }).
    success(function(data, status, headers, config){

      console.log(data);
      return data;
    }).
    error(function(data, status, headers, config){

    });
}

然后在你的控制器中:

productsFactory
    .getOneProduct()
    .then(response){});

答案 1 :(得分:2)

您需要返回从Promise返回的$http

productsFactory.getOneProduct = function(){
  return $http({
    method: 'GET',
    url: '/api/products/' + $stateParams.productID
  });
}

然后在你的控制器中:

productsFactory.getOneProduct().then(successFunction, errorFunction);

您可以进一步简化工厂调用:

 productsFactory.getOneProduct = function(){
      return $http.get('/api/products/' + $stateParams.productID);
    }