将参数传递给AngularJS $ http Factory

时间:2014-06-10 03:28:02

标签: 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返回的值(如下所示)。要获取数据并在代码中使用它,我使用的是成功方法,它可以正常工作:

var MyCtrl = function ($scope, $location, $http,   $routeParams,  TestHttpFactory) {

    TestHttpFactory
        .success(function (data) { 
            $scope.item =  data;
            //do something with $scope.item
    }); 
};

但是,我不确定如何将参数传递给工厂,以下失败并显示错误: object不是函数

TestHttpFactory({id : $routeParams.id})
        .success(function (data) { 
            $scope.item =  data; 
    }); 

我应该如何将参数传递给工厂?

1 个答案:

答案 0 :(得分:3)

因为你正在使用一个被调用的函数,所以你不能。让我们重构你的'工厂'/服务

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