我在工厂里有这个
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)输出我想要的数据。但是当我从控制器调用它时,我得到“未定义”。猜猜它与从匿名函数返回有关吗?我做错了吗?
答案 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);
}