Как сохранить мои данные при нажатии кнопки «Назад»? - PullRequest
0 голосов
/ 06 июля 2019

Запуск вызова 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();
    }

}]);

1 Ответ

0 голосов
/ 11 июля 2019

Спасибо @georgeawg за предложение этого решения. Ранее я сохранял все свои данные ответа на вызов API в $scope в контроллере . Но, сохранив эти данные в сервисе , я смог предотвратить их потерю во время $route.reload().

Если вы хотите узнать, как хранить данные в службе, перейдите по этой ссылке:

Рекомендации Angularjs для хранилища данных

...