Angular js — имитация отключения кнопки «назад/вперед» в браузере

Я работаю над приложением, которое требует, чтобы я имитировал кнопку браузера назад/вперед (я реализовал 2 кнопки). Я могу добиться этой функциональности, используя window.history.forward() и window.history.back(). Функционал работает как надо. Но у меня есть одна проблема: у меня есть требование отключить кнопку «вперед», когда больше нет страниц для дальнейшего просмотра, и наоборот для кнопки «назад».

Я пытался использовать следующие обходные пути, но ничего не работает.

if(!window.history.next){
    $scope.abcService.enableForwardButton = false;
}

Это if условие никогда не выполняется, даже если у меня нет страниц для дальнейшего просмотра.

var index = window.history.length;
if(window.history[index] != window.location)
{
    $scope.abcService.enableForwardButton = true;
}

Любые входные данные будут полезны. Примечание: отключение кнопок является обязательным требованием для приложения.


person Amit    schedule 15.12.2014    source источник
comment
Вы должны использовать службу $window, а не окно напрямую.   -  person Fals    schedule 15.12.2014
comment
перемотка вперед всегда должна быть отключена, если только вы не нажали кнопку «Назад» перед тем, как щелкнуть что-либо еще. поэтому отключайте перемотку вперед при каждой навигации и разблокируйте только после команды «назад» в течение короткого времени ожидания setTimeout.   -  person dandavis    schedule 16.12.2014
comment
Я могу включить кнопку «Вперед» при нажатии кнопки «Назад», но меня больше беспокоит, как определить, последняя ли это страница, а затем отключить кнопку «Вперед», когда больше нет доступных страниц для дальнейшего просмотра.   -  person Amit    schedule 16.12.2014
comment
если вы используете angular, получите $state.current.name и отключите его в блоке if, если ($state.current.name=='lastPage'){toDo()}   -  person syarul    schedule 16.12.2014
comment
Что, если пользователь зайдет на ваши страницы с какой-то другой веб-страницы? Тогда у него будет запись в window.history, и когда он нажмет кнопку «Назад», он покинет ваше приложение. Это желаемое поведение?   -  person David Votrubec    schedule 21.05.2015


Ответы (2)


Вам может пригодиться сервис $location. https://docs.angularjs.org/api/ng/service/$location #состояние

Кроме того, я не уверен, насколько это будет совместимо с angular, но вы можете посмотреть на https://github.com/browserstate/history.js/

person jeff.d    schedule 23.04.2015

Я считаю, что это должно сработать для вас.

if(typeof window.history.forward!=='function'){
  $scope.abcService.enableForwardButton = false;
}

Когда вы можете перемещаться вперед, тогда typeof window.history.forward является «функцией», когда вы не можете, тогда она «не определена»

person Michael Wallace    schedule 19.12.2014