Angularjs $http在服务中,返回

Angularjs $http在服务中,返回,angularjs,Angularjs,我的工厂里有这个 productsFactory.getOneProduct = function(){ $http({ method: 'GET', url: '/api/products/' + $stateParams.productID }). success(function(data, status, headers, config){ console.log(data); return data; }). e

我的工厂里有这个

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();
productsFactory
    .getOneProduct()
    .then(response){});
productsFactory.getOneProduct().then(successFunction, errorFunction);

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

您的
getOneProduct
函数不返回任何内容,这意味着它隐式返回
未定义的
,因此出现错误

$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){

    });
}
然后在控制器中:

$scope.selectedProduct = ProductsFactory.getOneProduct();
productsFactory
    .getOneProduct()
    .then(response){});
productsFactory.getOneProduct().then(successFunction, errorFunction);

您需要返回从
$http
返回的
承诺

productsFactory.getOneProduct = function(){
  return $http({
    method: 'GET',
    url: '/api/products/' + $stateParams.productID
  });
}
然后在控制器中:

$scope.selectedProduct = ProductsFactory.getOneProduct();
productsFactory
    .getOneProduct()
    .then(response){});
productsFactory.getOneProduct().then(successFunction, errorFunction);
您可以进一步简化工厂电话:

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

谢谢。但事实上,我应该在控制器中键入什么?尝试过这个,但我没有定义。ProductsFactory.getOneProduct().then(函数(d){$scope.selectedProduct=d;});什么是未定义的?
$scope.selectedProduct
?还是
d