2016-07-25 62 views
1

在角度应用程序中,我有以下问题: - 第一页是带有表单和搜索列表的搜索页面。搜索结果是分页,ia有一个“显示更多”按钮,显示下面的10个结果 - 单击结果带到第二页,并提供有关元素的详细信息(只是一种经典的搜索行为)。Angular:选择元素后回到搜索列表

现在我的问题是:从元素页面,单击浏览器的BACK按钮将用户带到搜索页面,但搜索将丢失。

我实现了一个缓存,以便将表单存储在一个服务中 - 这样我就可以自动重新启动搜索。但在这种情况下,滚动丢失,只显示十个第一个结果(分页丢失)。

我看到的唯一解决方案是每次单击“显示更多”按钮时在历史记录中添加一个条目,但我还必须保存某个窗口的滚动级别。我觉得这个解决方案相当复杂和烦人,并不漂亮。

所以问题是:是否有一个共同和更简单的方法来做到这一点?

我认为这是ajax/angular应用程序的一个常见问题,当我选择一张专辑时,我有同样的问题)。

回答

0

这应该通过url params进行管理......应用程序路由器必须能够请求确定的应用程序状态。在管理服务器端搜索结果时,您需要管理客户端搜索结果。

一个例子可能是:如果有人通过邮件分享您的搜索结果会发生什么?

这就是为什么一切关于应用程序的状态应该保持在网址: http://myapp.com/search?page=1&...

这样浏览器的history.back BTN不正是你所寻找的构建你的应用程序。

+0

感谢您的反馈,这真的很有用我开始实施这样的参数。但是,你有什么想法,为什么用ajax应用程序,我们不能使用浏览器缓存?例如,当你回顾历史时,JSF应用程序没有任何新的请求,它只使用本地缓存(参考http://stackoverflow.com/questions/15493276/browser-back-button-navigation) – Rolintocour

+0

我不喜欢不了解Java Server Faces,但并不意味着...浏览器缓存取决于浏览器,而不是服务器或框架,并且始终使用它,根据** HTTP ETag **跳过许多请求... ...很可能,你的应用程序没有被优化来做到这一点。如果打开开发者工具,在网络面板中,可以看到资源是如何加载的以及它们的状态代码:304通常意味着资源没有被修改,可以使用本地版本。客户端缓存应该通过HTML5应用缓存和服务工作者进行优化。 – Hitmands