不幸的是,我们遇到了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
答案 0 :(得分:4)
您可以使用角度装饰器来完成此操作。
服务装饰器拦截服务的创建,允许它覆盖或修改服务的行为。装饰器返回的对象可以是原始服务,也可以是替换或包装并委托给原始服务的新服务对象。 有关详细信息,您可以检查角度documentation。
示例:
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 :(得分:3)
版本1.4中的$wnd.jQuery("#container_id button").removeClass("btn");
已添加到模块API中。这就是它在1.2.x中不起作用的原因。
请参阅下面的工作演示或jsfiddle。
我花了一些时间来实施补丁方法,因为我错过了回复module.decorator
的承诺。但现在应该可以了。
$http

angular.module('patchDemo', [])
.config(function ($provide) {
$provide.decorator('$http', function ($delegate) {
// NOTE: $delegate is the original service
$delegate.patch = function(url, data, config) {
var paramsObj = angular.extend({}, config || {}, {
method: 'PATCH',
url: url,
data: data
});
return $delegate(paramsObj);
}
return $delegate;
});
})
.controller('MainController', MainController);
function MainController($http) {
console.log($http.patch);
//$http({method: 'PATCH', url: 'http://jsonplaceholder.typicode.com/posts/1', data: {title:'foo'}}); //>>>>>working long version of patch
$http.patch('http://jsonplaceholder.typicode.com/posts/1', {
title: 'foo'
}).then(function(response) {
console.log(response);
});
}