Reputation: 353
This function is called when a button is clicked on my web page.
$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
};
But strangely when my page is redirected, the location is completely wrong.
The first console.log
prints /oneMinuteMetric/loadCapturedMetrics?×tamp=1467976859092&tagName=TestTag
and the second console.log
also prints /oneMinuteMetric/loadCapturedMetrics?×tamp=1467976859092&tagName=TestTag
whereas in my browser window the path is /oneMinuteMetric/loadCapturedMetrics?tagName=TestTag×tamp=1468143868308%2F%3FtagName%3DTestTag
"%2F%3FtagName%3DTestTag
" get appended on its own and then my request is rejected as bad request by the server. We have used this method for redirecting at several places but strangely it does not work here. Why?
PS: The location of my web page is /oneMinuteMetric/tagHistory?tagName=TestTag
. This where the button is clicked and the given function is executed
Solution: $location.url(path) works in this case.
Upvotes: 1
Views: 457
Reputation: 1909
Use $location.search()
to add query parameters.
$location.path("/oneMinuteMetric/loadCapturedMetrics");
$location.search({'timestamp' : tokenAt, 'tagName' : $stateParams.tagName });
When you pass an array to $location.search()
it will override the existing query parameter component.
In your case, the query parameter "%2F%3FtagName%3DTestTag" still exists from current url because $location.path()
will only update the path and won't modify/override query parameter component.
Upvotes: 2