在一个服务中引用多个API调用(Angular)

时间:2016-04-30 10:58:10

标签: javascript angularjs json angularjs-service angularjs-http

我通过Angular $ http请求访问API,以收集不同足球队的信息。

如果我只是访问一个团队,这没关系 - 我会创建一个发出呼叫的服务,然后在我的控制器中引用服务功能。但是,我想在众多团队中执行此操作,而无需为每个团队创建单独的服务模块。

服务

app.factory('APIService', ['$http',
   function($http) {
      return $http.get('http://API/team/1204?Authorization=xxxxx')
      .success(function(data) {
        return data;
      })
        .error(function(err) {
        return err;
      });
   }
]);

在我的控制器内......

APIService.success(function(data) {
    $scope.apiData = data; 
});

正如您在服务中看到的那样,团队是特定的," 1204",并且只会从该团队中提取数据。我想创建一个允许四位数代码可以互换的功能,具体取决于团队,但我不知道如何或放在哪里。

任何帮助都会受到大力赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

我构建了一个Generic Angular Service,这是您在应用程序中需要的唯一服务。

https://github.com/cullimorer/AngularGenericAPIService

该服务包含许多不同的方法:

GET(数组) - GetListData

GET - GetData

PUT - UpdateData

POST - AddData

DELETE - DeleteData

那么,这有什么特别之处?那么,你可以调用任何端点传入任意数量的参数。这很像#34; string.Format"函数在C#中,它将获取指定对象的值并将它们插入另一个字符串。 commonService包含一个名为" stringFormat"的方法。它复制此功能以供通用API服务使用。

让我们看看我们在实践中如何做到这一点。如果你想调用一个名为" fooBars"通过" ID"为了返回单个" fooBar",我们会这样做:

return genericService.getData('fooBars/{0}', [1]);

这将使用URL调用API:

" http://localhost/API/fooBars/1"

第二个参数是一个数组,这样你可以将任意多个参数传入字符串,让我们说我们有很多" foos"和"酒吧"我们可能会这样做:

return genericService.getData('foos/{0}/bars/{1}', [1, 2]);

这将使用URL调用API:

" http://localhost/API/foos/1/bars/2"

等等。它是一个非常简单的服务,但我在所有AngularJS项目中都使用它,因为它很容易实现,意味着你不必在Angular服务中编写大量不同的查询或写长字符串级联。