Angularjs 如何在angular中扩展$http服务?

Angularjs 如何在angular中扩展$http服务?,angularjs,angular-http,Angularjs,Angular Http,不幸的是,我们无法运行1.2.26(当它升级为1.2.28时) 同时,我如何修补(heh)$http,从而使快捷patch方法可用?我对整个服务/工厂/模块都很陌生。我已经搜索了好几个小时了,似乎还没找到答案 myApp.factory('patchedHTTP', function($http, BasicService) { // $http['patch'] = function(url, data, config) { // return $http(angular.exte

不幸的是,我们无法运行1.2.26(当它升级为1.2.28时)

同时,我如何修补(heh)$http,从而使快捷
patch
方法可用?我对整个服务/工厂/模块都很陌生。我已经搜索了好几个小时了,似乎还没找到答案

myApp.factory('patchedHTTP', function($http, BasicService) {
  // $http['patch'] = function(url, data, config) {
  //   return $http(angular.extend(config || {}, {
  //     method: 'patch',
  //     url: url,
  //     data: data
  //   }));
  // };
  var extended = angular.extend(BasicService, {});
  extended.createShortMethodsWithData('patch');
  return extended;
});

以上是我最好的。。。它什么都不做XD

你可以用一个角度装饰器来完成

服务装饰器拦截服务的创建,允许它重写或修改服务的行为。装饰器返回的对象可能是原始服务,也可能是替换或包装并委托给原始服务的新服务对象。 有关更多信息,请查看“角度”

例如:

var app = angular.module('app');
app.decorator('$http', function ($delegate) {
  // NOTE: $delegate is the original service

  $delegate.patch = function () {
    // do the implementation here
  };

  return $delegate;
});

// usage
app.controller('SomeController', function($http) {
    $http.patch();
});

您可以保留此装饰程序,直到升级到某个较新版本,而不仅仅是安全地删除它。

模块。装饰程序已添加到版本1.4中的模块API中。这就是为什么它在1.2.x中不起作用

请在下面找到一个正在运行的演示,或者在这里找到

我花了一段时间来实现补丁方法,因为我错过了返回
$http
的承诺。但现在它应该可以工作了

angular.module('patchDemo',[])
.config(函数($provide){
$provide.decorator('$http',函数($delegate){
//注意:$delegate是原始服务
$delegate.patch=函数(url、数据、配置){
var paramsObj=angular.extend({},config |{}{
方法:'补丁',
url:url,
数据:数据
});
返回$delegate(paramsObj);
}
返回$delegate;
});
})
.控制器(“主控制器”,主控制器);
函数MainController($http){
log($http.patch);
//$http({方法:'PATCH',url:'http://jsonplaceholder.typicode.com/posts/1,数据:{title:'foo'}});//>>修补程序的工作长版本
$http.patch('http://jsonplaceholder.typicode.com/posts/1', {
标题:“富”
}).然后(功能(响应){
控制台日志(响应);
});
}


修补程序已经可用:1.2.27尚未完成:)只想修补这一点,而不是全部。这太神奇了。谢谢你,你很快!:)我无法确定何时/何地运行此代码。似乎找不到我的应用程序实例。好的,我找到了。必须使用配置块。你想更新你的答案来显示这一点,然后我会选择它作为答案:)var应用程序应该是你的模块,你想在那里注册装饰。示例:var app=angular.module('app');是的,我把它放在我的应用程序声明下面,没有什么好处。:/必须把它放在配置块中。