AngularJS - изменить $location молча - удалить строку запроса
Есть ли способ тихо изменить маршрут в строке url с помощью angular?
Пользователь нажимает ссылку для сообщения электронной почты, которое:
/verificationExecuted?verificationCode=xxxxxx
Когда загружается страница, я хочу прочитать проверочный код, а затем очистить его:
if($location.path() == '/verificationExecuted'){
this.registrationCode = this.$location.search()["verificationCode"];
this.$location.search("verificationCode", null); //Uncomment but make this silent!
if(registrationCode != null) {
....
}
else $location.path("/404");
}
Что происходит, когда я очищаю его, остается оставшаяся часть маршрута ( "/verificationExecuted" ) остается, но повторяет триггеры маршрута, поэтому он снова появляется без кода подтверждения и переходит прямо к 404.
Я хочу удалить код, не делая ничего другого.
Ответы
Ответ 1
Вы всегда можете установить опцию reloadOnSearch
на вашем маршруте как false.
Это предотвратит перезагрузку маршрута, если изменяется только строка запроса:
$routeProvider.when("/path/to/my/route",{
controller: 'MyController',
templateUrl: '/path/to/template.html',
//Secret Sauce
reloadOnSearch: false
});
Ответ 2
попробуйте это
$location.url($location.path())
Подробнее о $location
см. ,
Ответ 3
У меня было аналогичное требование для одного из моих проектов.
В этом случае я использовал сервис.
app.factory('queryData', function () {
var data;
return {
get: function () {
return data;
},
set: function (newData) {
data = newData
}
};
});
Эта служба затем использовалась в моем контроллере как:
app.controller('TestCtrl', ['$scope', '$location', 'queryData',
function ($scope, $location, queryData) {
var queryParam = $location.search()['myParam'];
if (queryParam) {
//Store it
queryData.set(queryParam);
//Reload same page without query argument
$location.path('/same/path/without/argument');
} else {
//Use the service
queryParam = queryData.get();
if (queryParam) {
//Reset it so that the next cycle works correctly
queryData.set();
}
else {
//404 - nobody seems to have the query
$location.path('/404');
}
}
}
]);