Javascript 在发送$http请求数据之前对其进行筛选
它似乎会自动从请求数据/参数对象中剥离以Javascript 在发送$http请求数据之前对其进行筛选,javascript,angularjs,angularjs-http,Javascript,Angularjs,Angularjs Http,它似乎会自动从请求数据/参数对象中剥离以$$为前缀的属性,例如$$hashKey 我想排除我自己不想发送到服务器的仅UI属性,但当然我不想使用$$ Angular是否公开了他们的$过滤方法,我可以用它过滤带有不同前缀的对象? 而且,在哪里使用这种(或自定义)方法是最好的?转变?拦截器 假设这是我的数据对象: var payload = { id: 12345, name: 'Bob', _editing: true }; 我将其保存到服务器,如下所示: $http
$$
为前缀的属性,例如$$hashKey
我想排除我自己不想发送到服务器的仅UI属性,但当然我不想使用$$
Angular是否公开了他们的$
过滤方法,我可以用它过滤带有不同前缀的对象?
而且,在哪里使用这种(或自定义)方法是最好的?转变?拦截器
假设这是我的数据对象:
var payload = {
id: 12345,
name: 'Bob',
_editing: true
};
我将其保存到服务器,如下所示:
$http({
method: 'POST',
url: '/save',
data: payload
});
在发送请求之前,我如何删除\u编辑
属性
编辑:或任何以开头的属性
我需要在所有请求中使用它,并且需要在深层复杂对象中使用它
我使用的是Angular v1.3.18
谢谢大家! 在调用post
之前,只需删除有效负载中的属性即可
var payload = {
id: 12345,
name: 'Bob',
_editing: true
};
delete payload._editing
$http({
method: 'POST',
url: '/save',
data: payload
});
我建议使用http拦截器
在您的配置中,您只需将这一行放在app.js中
.config(function ($httpProvider) {
$httpProvider.interceptors.push('httpInterceptor');
})
我创建了一个这样的工厂
.factory('httpInterceptor', ['$q', '$rootScope', '$filter', function ($q, $rootScope, $filter) {
var canceller = $q.defer();
//some vars here
return {
request: function (config) {
//Do some magic here
//modify the header for example
config.headers.someHeader = something;
//or set a timeout if it takes too long
config.timeout = 20000;
return config || $q.when(config)
},
response: function (response) {
//handle Response if you want
return response || $q.when(response);
},
responseError: function (response) {
//handle error here if you want
return $q.reject(response);
}
};
}])
您可以访问config对象并从标头或发送的参数中添加或删除属性,或者进行超时和填充,或者访问响应并执行广播或smth,具体取决于您需要什么
希望这有帮助您应该使用拦截器来修改您的请求或响应。顾名思义,它的任务是拦截http请求或响应。引自:
用于全局错误处理、身份验证或任何类型的
请求或请求的同步或异步预处理
在对响应进行后处理时,最好能够拦截
在将请求移交给服务器之前进行请求,并在提交之前进行响应
它们被移交给启动这些应用程序的应用程序代码
请求
我已经为此准备了一份工作。fiddle执行ajax请求,因此请检查网络选项卡以查看请求有效负载。当然,可以使用$httpProvider.interceptors
,但是对于剥离部分,您可能可以使用以下方法做些好事:
这将返回{a:1,b:2}
但是如果您不想使用外部库,而仅仅依赖Angular的实用工具套件,您可以:
angular.forEach(o, function (value, key) {
if (key.indexOf('_') === 0) {
delete o[key]
}
});
好的,谢谢,但是你知道Angular是否公开了他们用来剥离$$
属性的过滤方法吗?如果我能使用一个内置的解决方案,那就太好了。所以你可以说如果(config.data.editing.indexOf(“”“”)>-1){do或don do smth right?}但是内置的不确定
var o = {_f: 1, _b: 2, a: 1, b: 2 }
_.omit(o, function (value, key) {
return key.indexOf('_') === 0;
});
angular.forEach(o, function (value, key) {
if (key.indexOf('_') === 0) {
delete o[key]
}
});