Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS使用浏览器维护状态';s的URL历史记录_Javascript_Angularjs_Url_Browser_Browser History - Fatal编程技术网

Javascript AngularJS使用浏览器维护状态';s的URL历史记录

Javascript AngularJS使用浏览器维护状态';s的URL历史记录,javascript,angularjs,url,browser,browser-history,Javascript,Angularjs,Url,Browser,Browser History,当前情况: 用户请求(类别id=789中的所有产品) 服务器发回index.jsp,运行index.jsp中的AngularJS内容,ngRoute查看“/#!/list/789”,AngularJS获取模板,ProductListController运行,执行GET请求,接收JSON格式的产品列表 浏览器地址栏中的URL更改为 在此产品列表页面中,用户可以过滤页面中的产品,例如显示此价格范围内的所有产品、显示具有此颜色的产品、属于此品牌的产品等,所有这些都使用JavaScript完成 问题是,

当前情况:

用户请求(类别id=789中的所有产品)

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

浏览器地址栏中的URL更改为

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

是否有可能以某种方式保留一个“状态”,以便当用户返回时,所有过滤器都将重新应用?
我假设这与历史有关,但我如何在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/#/名单/789

我如何在AngularJS中实现这一点

我知道这些解决方案:
-本地存储
-Cookies,即每次用户应用过滤器时,浏览器都会通知服务器(嘿,用户刚刚应用了价格过滤器),服务器会在会话中保存该过滤器

但是,最好在浏览器历史记录中保持状态,因为在应用每个筛选器时,会创建一个新的URL,从而使用户能够撤消每个筛选器应用程序

您可以使用

保留状态您可以使用

保留状态请参见