Angularjs 如何在angular中扩展$http服务?
不幸的是,我们无法运行1.2.26(当它升级为1.2.28时) 同时,我如何修补(heh)$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
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');是的,我把它放在我的应用程序声明下面,没有什么好处。:/必须把它放在配置块中。