Mam stronę wyszukiwania, która pozwala użytkownikowi na drążenie kategorii i/lub wpisywanie wyszukiwanych terminów. Chcę umożliwić użytkownikowi cofnięcie tych działań za pomocą przycisku Wstecz. Używając AngularJS, jak mogę mieć tę stronę, dodawać wpisy do historii przeglądarek dla każdej z tych akcji. Nie mogę używać pushstate HTML5.AngularJS dodaj do historii przeglądarki bez przeładowania strony i bez HTML5 pushstate
Odpowiedz
znalazłem mogę to zrobić przez zmianę parametrów ciąg kwerendy bez przeładowania strony za pomocą odpowiedź o reloadOnSearch z here:
$routeProvider
.when('/items', {
controller: 'ItemsCtrl',
templateUrl: '/templates/items',
reloadOnSearch: false
},
...
);
A potem, od tej samej odpowiedzi, ustawienie ciąg kwerendy przy użyciu:
$location.search('id', 123);
i wreszcie wykrywania trasy zmienia za pomocą odpowiedź od here:
$scope.$on('$routeUpdate', function(){
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
Możesz wyłączyć tryb HTML5 za pomocą $locationProvider.html5Mode(false)
.
Następnie wystarczy użyć adresów URL hashbang takich jak <a href="#!/search">Search</a>
, zostaną one dodane do historii przeglądarki.
Czy można zmienić trasę bez konieczności ponownego uruchamiania sterownika? – adam0101
Nie sądzę, aby można było dodawać wpisy do historii przeglądarki bez użycia hasła HTML5 (przynajmniej bez zmiany aktualnej lokalizacji).
MDN strona omawia wprowadzanie pushState i jak umożliwia to nowe funkcjonalności (co oznacza, że nie było wcześniej możliwe): https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
EDIT: Jeśli powodem nie można używać HTML5 pushState dlatego wsparcia przeglądarki, zobacz ten PolyFill: https://github.com/browserstate/history.js
Wzdłuż z ponumerowanym poniżej reloadOnSearch w celu śledzenia zdarzenia zmiany lokalizacji.
$scope.$on('$locationChangeSuccess', function() {
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
Choć może to pomóc komuś.
Dokładnie tego, czego szukałem. Dzięki! – LT86