$ location.path重定向到错误的位置

时间:2016-07-10 09:58:23

标签: javascript angularjs

在我的网页上单击按钮时会调用此函数。

$scope.go=function(takenAt){
    var path = '/oneMinuteMetric/loadCapturedMetrics?'+'&timestamp=' + takenAt + '&tagName='+ $stateParams.tagName;
    console.log(path);    //first
    $location.path(path);
    console.log($location.path());  //second            
};

但奇怪的是,当我的页面被重定向时,位置完全错误。

第一个console.log打印/oneMinuteMetric/loadCapturedMetrics?&timestamp=1467976859092&tagName=TestTag

,第二个console.log也会打印/oneMinuteMetric/loadCapturedMetrics?&timestamp=1467976859092&tagName=TestTag

而在我的浏览器窗口中,路径为/oneMinuteMetric/loadCapturedMetrics?tagName=TestTag&timestamp=1468143868308%2F%3FtagName%3DTestTag

%2F%3FtagName%3DTestTag”会自行附加,然后我的请求被服务器拒绝为错误请求。我们已经使用这种方法在几个地方重定向,但奇怪的是它在这里不起作用。为什么呢?

PS:我的网页位置为/oneMinuteMetric/tagHistory?tagName=TestTag。这是单击按钮并执行给定功能的地方

解决方案: $ location.url(路径)适用于这种情况。

2 个答案:

答案 0 :(得分:2)

使用$location.search()添加查询参数。

$location.path("/oneMinuteMetric/loadCapturedMetrics");
$location.search({'timestamp' : tokenAt, 'tagName' : $stateParams.tagName });

数组传递给$location.search()时,它将覆盖现有的查询参数组件。

在您的情况下,查询参数“%2F%3FtagName%3DTestTag”仍然存在于当前网址中,因为$location.path()只会更新路径,并且不会修改/覆盖查询参数成分

答案 1 :(得分:0)

$location.url(path)适用于这种情况。