Запуск вызова API при нажатии кнопки браузера назад, когда для reloadOnSearch установлено значение false
Поскольку я установил reloadOnSearch
равным false
, я использую $ routeUpdate дляопределить браузер назад кнопки нажатия.В настоящее время, когда это срабатывает, я перезагружаю страницу.Но эта перезагрузка приводит к потере всех данных ответа на вызов API, которые я храню. Есть ли способ предотвратить эту потерю данных?
Я показываю список данных с нумерацией страниц на моем сайте.Каждый раз, когда пользователь меняет страницу, запускается функция, которая проверяет, были ли уже получены данные.Если нет, то вызов API делается для его получения.Поскольку я установил reloadOnSearch
равным false
, нажатие на кнопку возврата в браузере изменяет только URL, а не представление.Я использую $routeUpdate
в этом случае.Когда срабатывает $routeUpdate
, я сначала проверяю, было ли это из-за щелчка по страницам или нажатия кнопки «Назад».В случае щелчка по страницам выполняется обычный вызов API.Но если это произошло из-за кнопки «Назад», я перезагружаю страницу.Но это приводит к потере всех ранее полученных данных ответа, которых я хотел бы избежать.Очевидным решением было бы вызвать функцию вызова API в обратном вызове $routeUpdate
.Но проблема в том, что на моем сайте есть несколько списков данных, и я стараюсь не писать несколько условных выражений и вызовов функций в app.run()
. Можно ли как-то сохранить свои данные, нажимая кнопку "Назад"?
Эта часть кода находится в app.run()
$rootScope.$on('$routeUpdate', function(event, next){
console.log("route update fired");
// This gives me the parameters in the URL (eg.page number)
let params = JSON.stringify(next.params);
console.log(params); // Eg. {listTransactionsPage: 2}
// Now I will compare this with the $rootScope value which is saved in the controller (See the code below for more details).
if(params !== JSON.stringify($rootScope.listCurrentParams))){
console.log("back/forward button clicked.");
$route.reload();
}
else{
console.log("route changed via pagination");
}
}
});
Эта частькода находится в app.controller ()
app.controller('listTransCtrl', ['$scope', '$location', '$window', '$rootScope', function($scope, $location, $window, $rootScope){
console.log("Inside listTransCtrl.");
$rootScope.listCurrentParams = {};
// the function that gets called upon pagination button click..
$scope.listTransPageChanged = function(pageNum){
console.log(pageNum);
$location.search('listTransactionsPage', pageNum);
$rootScope.listCurrentParams = $location.search();
console.log($rootScope.listCurrentParams);
// the API call gets fired
$scope.getAllTransFunc();
}
}]);