【问题标题】:Passing Parameters to AngularJS $http Factory将参数传递给 AngularJS $http 工厂
【发布时间】:2014-06-10 03:28:01
【问题描述】:

我为 $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 is not a function

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

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

【问题讨论】:

    标签: angularjs


    【解决方案1】:

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

    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 请求已经发出成功和错误方法,你不能更改它,因此您需要从您的控制器获取实际的 $hht 并从那里进行调用,或者使用一个代理函数来获取参数并为您进行调用。这实际上是 $resource 服务所做的事情,如果您不需要 $hhtp 提供的低级处理,您可能应该考虑一下
    猜你喜欢
    • 2012-08-29
    • 2015-11-29
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    相关资源
    最近更新 更多