javascript - AngularJS 使用浏览器 URL 历史记录维护状态

标签 javascript angularjs url browser browser-history

现状:

用户请求http://localhost/#!/list/789 (类别 id = 789 中的所有产品)

服务器发回index.jsp,index.jsp中的AngularJS内容运行,ngRoute看到“/#!/list/789”,AngularJS获取模板,ProductListController运行,执行GET请求,接收JSON格式的产品列表

浏览器地址栏中的 URL 更改为 http://localhost/list/789

在此产品列表页面中,用户可以过滤页面中的产品,例如:显示此价格范围内的所有产品,显示具有此颜色、属于此品牌的产品等,全部使用 JavaScript 完成
问题是如果用户点击产品页面,例如localhost/show/89 并通过点击后退按钮返回,他们将再次看到产品列表页面,但所有过滤器都将消失

是否可以以某种方式保留“状态”,以便当用户返回时,他们的所有过滤器都将被重新应用?
我认为这与历史pushState有关,但是我如何在AngularJS中做到这一点,可能吗?

我认为这应该是可能的,因为在当前情况下,当浏览器地址栏中的URL发生变化时(从localhost/#!/list/789到localhost/list/789),浏览器不会发出任何请求服务器
因此,当用户应用过滤器时,URL 可以更改为 localhost/#!/list/789?price=50-100&name=a 或 localhost/#!/list789#price:50-100,name=a,但没有向服务器发送请求
用户进入产品页面,点击返回,他们将到达 localhost/#!/list/789?price=50-100&name=a 而不是 localhost/#!/list/789

如何在 AngularJS 中执行此操作?

我知道这些解决方案:
- 本地存储
- Cookie,即每次用户应用过滤器时,浏览器都会通知服务器(嘿,用户刚刚应用了价格过滤器),服务器将其保存在 session 中
但是,最好在浏览器历史记录中维护状态,因为应用每个过滤器时,都会创建一个新的 URL,从而使用户能够撤消每个过滤器应用程序

最佳答案

您可以使用 Angular Ui Router 保留状态

关于javascript - AngularJS 使用浏览器 URL 历史记录维护状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011087/

相关文章:

javascript - ngFocus 在 Firefox 上出现问题?

javascript - 将 Angular $asyncValidators 与缓存一起使用

ASP.NET 回发丢失 URL 中的哈希值

jquery - Grails Ajax URL createLink 不起作用

javascript - jQuery 通过单击链接来排列 li 顺序

javascript - 这对 Cheat Engine 有用吗?

javascript - 如何在 2D 环境中 'unbunch' (余)正弦波?

javascript - 在通过 JS 进行 REST 调用之前尝试以 Angular 显示弹出窗口

Javascript/AngularJS 强制数组数据类型

url - 如何将编码的 URL 转换为可读的文本?