我们在angular.js上有一个Web应用程序,它使用REST搜索API搜索系统中的某些用户。
/ search/user?q='abc'
现在,当用户再次访问Web应用程序时,我们必须显示他过去所做的最近搜索结果。
我的问题:
可以在Angular.js中完成,还是必须通过显示最近搜索的单独后端API来完成? 如果它必须是后端,那么基于时间戳会在数据库中保存吗?
答案 0 :(得分:0)
从我的角度来看,你必须在客户端工作并依赖网络浏览器"存储"。要做到这一点,你有3个选择(也许我会忘记一些)。
有关这三个的更多信息,请查看以下答案:https://stackoverflow.com/a/19869560/2971820
但这些技术的副作用是您的搜索没有真正保存,所以如果用户通过其他方式(例如Android移动应用程序)访问您的Web应用程序,则无法将其恢复到之前的状态搜索。
答案 1 :(得分:0)
TL; DR我已经编写了一个库来处理这种+极端情况,有关用法,请参见https://github.com/JonasBa/recent-searches#readme。
虽然所有示例在技术上都可以,但它们并未涵盖存储最近搜索的极端情况,例如实现过期,排名或限制LocalStorage空间。您需要考虑的LocalStorage的主要缺点是,它将始终限于进行搜索的浏览器和设备。例如。如果您在台式机上搜索,然后在移动设备上搜索,则不会显示最近的搜索,反之亦然。同样的情况也适用于不同的域,因为LocalStorage是按domain划分范围的。
在实施最近的搜索时应考虑的一些极端情况是:
到期:假设某人搜索了一个查询iPhone,但在一个月前就找到了要修复iPhone的查询,那么修复iPhone查询可能已过时。
排名:进行前缀搜索时,排名也一样,如果用户3小时前进行了“苹果电视”查询,而8h前进行了“电视电缆”查询,现在他们搜索“电视”,则可能对两者实施排名系统。
安全地管理LocalStorage:仅写入LocalStorage最终将导致每次都需要解析大量的JSON,从而逐渐降低应用程序的速度,直到达到存储限制并失去此功能。
“最近搜索”库可帮助您解决以上所有问题。它将帮助您解决上述所有问题,并让您真正快速地建立最新搜索!