在我的网页上单击按钮时会调用此函数。
$scope.go=function(takenAt){
var path = '/oneMinuteMetric/loadCapturedMetrics?'+'×tamp=' + takenAt + '&tagName='+ $stateParams.tagName;
console.log(path); //first
$location.path(path);
console.log($location.path()); //second
};
但奇怪的是,当我的页面被重定向时,位置完全错误。
第一个console.log
打印/oneMinuteMetric/loadCapturedMetrics?×tamp=1467976859092&tagName=TestTag
,第二个console.log
也会打印/oneMinuteMetric/loadCapturedMetrics?×tamp=1467976859092&tagName=TestTag
而在我的浏览器窗口中,路径为/oneMinuteMetric/loadCapturedMetrics?tagName=TestTag×tamp=1468143868308%2F%3FtagName%3DTestTag
“%2F%3FtagName%3DTestTag
”会自行附加,然后我的请求被服务器拒绝为错误请求。我们已经使用这种方法在几个地方重定向,但奇怪的是它在这里不起作用。为什么呢?
PS:我的网页位置为/oneMinuteMetric/tagHistory?tagName=TestTag
。这是单击按钮并执行给定功能的地方
解决方案: $ location.url(路径)适用于这种情况。
答案 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)
适用于这种情况。