Tôi có trang tìm kiếm cho phép người dùng xem chi tiết các danh mục và/hoặc nhập cụm từ tìm kiếm. Tôi muốn cung cấp cho người dùng khả năng sử dụng nút quay lại để hoàn tác các tác vụ này. Sử dụng AngularJS, làm thế nào tôi có thể có trang này thêm các mục vào lịch sử trình duyệt cho mỗi hành động này. Tôi không thể sử dụng HTML5 pushstate.AngularJS thêm vào lịch sử trình duyệt mà không cần tải lại trang và không có HTML5 pushstate
Trả lời
tôi thấy tôi có thể làm điều này bằng cách thay đổi các tham số chuỗi truy vấn mà không tải lại trang bằng cách sử dụng câu trả lời về reloadOnSearch từ here:
$routeProvider
.when('/items', {
controller: 'ItemsCtrl',
templateUrl: '/templates/items',
reloadOnSearch: false
},
...
);
Và sau đó, từ câu trả lời tương tự, thiết lập các chuỗi truy vấn sử dụng:
$location.search('id', 123);
Và cuối cùng phát hiện tuyến đường thay đổi bằng câu trả lời từ here:
$scope.$on('$routeUpdate', function(){
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
Bạn có thể tắt chế độ HTML5 với $locationProvider.html5Mode(false)
.
Sau đó, chỉ cần sử dụng url băm như <a href="#!/search">Search</a>
, chúng sẽ được thêm vào lịch sử của trình duyệt.
Có thể thay đổi tuyến đường mà không cần bộ điều khiển được khởi tạo lại không? – adam0101
Tôi không tin rằng có thể thêm mục nhập vào lịch sử trình duyệt mà không sử dụng HTML5 pushstate (ít nhất, mà không thực sự thay đổi vị trí hiện tại).
trangCác MDN thảo luận về sự ra đời của pushstate và làm thế nào nó cho phép chức năng mới này (ám chỉ nó là không thể trước đó): https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history
EDIT: Nếu lý do bạn không thể sử dụng HTML5 pushstate là vì hỗ trợ trình duyệt, xem polyfill này: https://github.com/browserstate/history.js
Cùng với mã số reloadOnSearch bên dưới để theo dõi sự kiện thay đổi vị trí đã hoạt động đối với tôi.
$scope.$on('$locationChangeSuccess', function() {
$scope.sort = $location.search().sort;
$scope.order = $location.search().order;
$scope.offset = $location.search().offset;
});
Mặc dù nó có thể giúp ích cho ai đó.
- 1. Tải lại IFRAME mà không cần thêm vào lịch sử
- 2. pushState() và popState(): thao tác lịch sử của trình duyệt
- 3. Cập nhật URL của trình duyệt mà không cần tải lại trang
- 4. Change URL thanh địa chỉ trình duyệt với jQuery & ajax mà không cần tải lại trang
- 5. AngularJS chuyển hướng mà không cần đẩy trạng thái lịch sử
- 6. Nút quay lại API lịch sử HTML5 với tải trang một phần
- 7. Có thể viết lại url clientside bằng javascript mà không cần tải lại trang
- 8. URL thay đổi Backbone.js mà không cần tải lại trang
- 9. Tôi có thể cài đặt plugin mà không cần khởi động lại trình duyệt và máy
- 10. Lịch sử Html5 Api - pushState từ miền đến tên miền phụ
- 11. Cập nhật hình ảnh mà không cần tải lại trang
- 12. Chuyển tiếp trang jQuery và lịch sử trình duyệt
- 13. Có thể thu gọn kho lưu trữ .git mà không cần viết lại lịch sử không?
- 14. Sửa đổi iframe.src mà không cần nhập vào đối tượng lịch sử
- 15. Thay đổi URL trong trình duyệt của thanh địa chỉ mà không cần tải lại trang hiện
- 16. AngularJS Chế độ HTML5 làm suy giảm toàn bộ trang tải lại thay cho hashbang
- 17. Tải lại trình duyệt không đặt lại trang về đầu trang
- 18. Sử dụng HTML5 pushstate trên angular.js
- 19. ghi đè $ location pushState history AngularJS
- 20. Trình duyệt nào hỗ trợ API lịch sử HTML5?
- 21. Có thể buộc trình duyệt tải lại cùng một trang bằng một băm không?
- 22. cách cập nhật trang Django mà không cần tải lại trang?
- 23. Làm cách nào để tải lại div mà không cần tải lại toàn bộ trang?
- 24. GitHub thay đổi URL như thế nào mà không cần tải lại trang?
- 25. Làm thế nào Github làm pushState mà không có thẻ băm?
- 26. HTML5/jQuery: pushState và popState - liên kết sâu?
- 27. Sử dụng LoadControl mà không cần Trang
- 28. Có thể tải lại chế độ xem mà không cần khởi động lại Django không?
- 29. Thêm vào DOM mà không cần jQuery
- 30. Thay đổi URL mà không cần tải lại trang trong IE
Chính xác những gì tôi đang tìm kiếm. Cảm ơn! – LT86