【问题标题】:JavaScript service: how to provide a () method, like an object constructor?JavaScript 服务:如何提供 () 方法,如对象构造函数?
【发布时间】:2014-09-02 13:58:26
【问题描述】:

我想创建一个将创建an interface to AngularJS's $http based on this. 的服务我想使用依赖注入来注入服务,而无需重新编写单个函数调用并保持代码干净。为此,我提供了一个通用服务,它为 $http 对象创建一个变量,如下所示:

commonService = function(...) {
return {
    ...
    $http: $http
}

然后我在代码中的任何地方都使用common.$http。要将 $http 从 AngularJS $http 更改为我的 httpService,我只需要在一处进行更改。 httpService 看起来像这样:

function httpService($http, $q, pendingRequests, $interval) {
var get = function(url) {
    ...
    return requestPromise;
};

var service = {
    get:get
};

return service;

}

这适用于对$http.get() 的调用,但对$http({method:'get', url:'...'}); 的调用呢?

是否可以提供()方法,真的是httpService()()?否则它将调用 AngularJs 方法 httpService()。

【问题讨论】:

  • () 不是一种方法。它只是调用一个返回的函数。如果这就是您想要的,那么只需返回一个执行您需要的任何操作的函数。
  • @major-mann 这是如何工作的?喜欢$provide.decorator((), $http);?
  • 这是一篇博文,应该能让你继续前进solutionoptimist.com/2013/10/07/… :)
  • 基本上 $provide.decorator( '$http', [ "$delegate", function( $delegate ) {} ...里面,$delegate就是原来的$http。

标签: javascript angularjs


【解决方案1】:

你可以只返回一个函数而不是一个对象。您可以将属性添加到您的函数中

function httpService($http, $q, pendingRequests, $interval) {
   var get = function(url) {
      ...
      return requestPromise;
   };

  // Instead of returning an object, return a function
  var service = function() {
    // do whatever you want here
  };

  service.get = get;

  // Add more properties to service as needed

  return service;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-15
    • 2016-09-05
    • 1970-01-01
    • 2014-05-03
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多