将参数传递给AngularJS$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返回的值(如下所示)。为

我为$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返回的值(如下所示)。为了获得数据并在代码中使用它,我使用了成功方法,该方法非常有效:

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
    }); 
};