我试图解决前一位开发人员所犯的一个错误。目前在项目中我们有半可书签的页面。为什么一半?因为如果令牌已过期,用户将被重定向到他必须提供其凭据的资源,并且在成功时他将被重定向到他之前使用过的先前资源。听起来不错。接下来是问题,一些资源有服务器端过滤和高度复杂的逻辑,最终到达一个对象:
param = {
limit: 10,
offset: 0,
orderBy: 'value',
query: 'string query can include 10 more filters'
};
然后通过服务向终点发送请求
var custom = {};
function data(param) {
custom.params = param;
return $http.get('/data_endpoint', custom)
.then(function (response) {
return response.data;
});
从这部分请求工作正常,响应正确但url不是。用户无法使用搜索参数存储当前网址,因为网址没有,如果用户尝试使用已应用的过滤器返回上一页,则他无法做到这一点。 此应用程序中还有拦截器,它为每个api请求添加一个查询参数,因为每个api请求都需要一些特定的验证。这个参数总是一样的。
我试图将$location.search(param)
完全添加到此数据服务中,但它会使用无限循环的登录/注销循环来破坏应用程序,因为拦截器停止工作而所有其他请求都在没有特殊查询参数的情况下发送
然后我想在拦截器中添加这个参数如下:
config.params.hasOwnProperty('query') ? $location.search(config.params) : $location.search();
但它仍会将应用程序分解为无限循环。
此方法向url添加查询但不允许对其进行修改,因此如果用户应用了其他过滤,则不会发送新的已修改请求但会发送旧请求。
if (config.params.hasOwnProperty('query')){
for (var key in config.params){
$location.search(key, config.params[key])
}
}
这就是我决定在这里提问的原因,可能有人会提出如何解决这个问题的建议。提前谢谢。