Javascript AngularJs可书签url和查询参数

Javascript AngularJs可书签url和查询参数,javascript,angularjs,Javascript,Angularjs,我正试图纠正前一位开发人员所犯的一个错误。目前在项目中,我们有一半的可书签页面。为什么是一半?因为若令牌已过期,用户将被重定向到资源,他必须在其中提供他的凭据,成功后,他将被重定向到他以前使用过的资源。现在听起来不错。接下来的问题是,一些资源具有服务器端过滤和高度复杂的逻辑,最终会出现这样的一个对象: param = { limit: 10, offset: 0, orderBy: 'value', query: 'string

我正试图纠正前一位开发人员所犯的一个错误。目前在项目中,我们有一半的可书签页面。为什么是一半?因为若令牌已过期,用户将被重定向到资源,他必须在其中提供他的凭据,成功后,他将被重定向到他以前使用过的资源。现在听起来不错。接下来的问题是,一些资源具有服务器端过滤和高度复杂的逻辑,最终会出现这样的一个对象:

 param = {
        limit: 10,
        offset: 0,
        orderBy: 'value',
        query: 'string query can include 10 more filters'
    };
config.params.hasOwnProperty('query') ? $location.search(config.params) : $location.search();
然后通过服务向端点发送请求

var custom = {};
    function data(param) {
        custom.params = param;
        return $http.get('/data_endpoint', custom)
            .then(function (response) {
                return response.data;
            });
从这一部分来看,请求工作正常,响应正确,但url不正确。用户无法使用搜索参数存储当前url,因为url并没有该参数,若用户试图使用应用的过滤器返回上一页,他将无法执行该操作。 这个应用程序中还有拦截器,它向每个api请求添加一个查询参数,因为每个api请求都需要一些特定的验证。此参数始终相同

我曾尝试将
$location.search(param)
准确地添加到此数据服务,但它通过无限循环的登录/注销循环中断了应用程序,因为拦截器停止工作,所有其他请求都在发送时没有特殊的查询参数

然后我想在拦截器中添加如下参数:

 param = {
        limit: 10,
        offset: 0,
        orderBy: 'value',
        query: 'string query can include 10 more filters'
    };
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])
                }
            }

这就是为什么我决定在这里问这个问题,也许有人给了我一个如何解决这个问题的建议。提前感谢。

假设您使用一些角度路由,您可以将
重新加载搜索:false
添加到路由配置中,这将导致您对
$location.search()
的调用无法重新加载页面并使您陷入循环。当('/page',{templateUrl:'/views/page/data list.html',controller:'data',reloadOnSearch:false})仍然中断到无限循环时,请参见@ug`