将参数传递给AngularJS$http工厂
我为$http创建了一个工厂,如下所示将参数传递给AngularJS$http工厂,angularjs,Angularjs,我为$http创建了一个工厂,如下所示 TestApp.factory('TestHttpFactory', function ($http) { return $http({ method: 'GET', url: 'http://www.domain.com/api/get_item/?item_id=:id', params: { id: '@id' } }); }); 在控制器中,我需要获取API返回的值(如下所示)。为
TestApp.factory('TestHttpFactory', function ($http) {
return $http({
method: 'GET',
url: 'http://www.domain.com/api/get_item/?item_id=:id',
params: { id: '@id' }
});
});
在控制器中,我需要获取API返回的值(如下所示)。为了获得数据并在代码中使用它,我使用了成功方法,该方法非常有效:
var MyCtrl = function ($scope, $location, $http, $routeParams, TestHttpFactory) {
TestHttpFactory
.success(function (data) {
$scope.item = data;
//do something with $scope.item
});
};
但是,我不确定如何将参数传递给工厂,以下错误导致失败:对象不是函数
我应该如何将参数传递给工厂?您不能,因为您使用的是调用的函数。让我们重构您的“工厂”/服务
TestApp.factory('TestHttpFactory', function ($http) {
return function(id){
return $http({
method: 'GET',
url: 'http://www.domain.com/api/get_item/?item_id=:id',
params: { id: id }
});
}
});
然后在控制器中,您可以执行以下操作
var MyCtrl = function ($scope, $location, $http, $routeParams, TestHttpFactory) {
TestHttpFactory(1234)
.success(function (data) {
$scope.item = data;
//do something with $scope.item
});
};
谢谢,如果我理解正确,那么最初返回的不是$http对象,而是$http对象上调用的$get方法。正确的$http是服务$http()是服务调用,它返回特定类型的延迟,其中包含已发出$http请求的success和error方法,您不能更改它,因此您需要从您的合作伙伴处获得实际的$hht并从那里进行调用,或者使用代理函数获取参数并为您进行调用。这实际上就是$resource服务所做的,如果您不需要$hhtp提供的低级别处理,那么您可能应该研究一下
var MyCtrl = function ($scope, $location, $http, $routeParams, TestHttpFactory) {
TestHttpFactory(1234)
.success(function (data) {
$scope.item = data;
//do something with $scope.item
});
};