Удалите поиск $ location на странице обновления / перезагрузки в AngularJS - PullRequest
0 голосов
/ 03 июля 2019

Мне нужно очистить stateParams (параметры поиска) от Url, если пользователь перезагружает страницу или обновляет ее. Я использую AngularJS 1.5.8.

Я могу обнаружить событие перезагрузки / обновления и даже вывести на консоль, но код для удаления параметров поиска не срабатывает. Вот что я использую

var windowElement = angular.element($window);
windowElement.on('beforeunload', function (event) {
    $location.url($location.path());
    console.info("page refreshed." + $location.path());        
});

Есть указатели?

Ответы [ 2 ]

1 голос
/ 03 июля 2019

Надеюсь, это поможет другим, поскольку ни одно из предложений, которые я видел на SO, не сработало.Мне удалось создать что-то вроде хака, чтобы заставить это работать, используя следующий код в функции app.run .

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
    //not coming from any other page + coming to ads page + contains query string
    if (fromState.name == "" && toState.name == "current_page" && toState.url !== "/current-page-url") {
        $location.search({});
    }
});

Что происходит, если я захожу на страницу с других страниц, он будет заполнен fromState, но когда я перезагружу текущую страницу, fromState не будет иметь данных, а toState будет содержать информацию о текущей странице.Чтобы избежать непрерывных циклов, я также проверяю, содержит ли текущий URL строку запроса.

ОБНОВЛЕНИЕ Еще лучшее решение.Найдена некоторая помощь по этой ссылке .

$rootScope.$on("$locationChangeStart", function (event, next, current) {
        //Page reload detection
        if (next == current && && performance.navigation.type == 1) {
            event.preventDefault();
            $location.search({});
        }
    });

Первое решение удаляет строку запроса, даже когда вы загружаете страницу со строкой запроса в первый раз (через некоторую закладку).

Второе решение работает так, как задумано.

См. Это для справки: https://developer.mozilla.org/en-US/docs/Web/API/Window/performance

1 голос
/ 03 июля 2019

попробуйте

$location.search({});

, чтобы удалить все параметры.Если вы хотите удалить определенные, то

$location.search('key', null);

должны сделать свое дело.

Кроме того, проверьте $ destroy слушатель, который сообщает angular, что на $ destroyконтроллера / директивы, вызовите эту функцию.

$scope.$on('$destroy', function () {
   $location.search({});
});

Не много в документах ... но это здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...