我有3个JSP视图,它们都使用相同的JS文件(比如app.js)。
我的UI位于AngularJS上,它为每个JSP视图提供了不同的控制器,并且还具有在控制器之间共享信息的自定义服务。当我加载第一个JSP时,app.js文件中指定的控制器会在自定义服务中保存一个值。当我加载下一个JSP文件时,会重新加载app.js,因此自定义服务中保存的值将丢失。
有没有办法不重新加载JS文件?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
如果您无法控制服务器,则可以将数据保存在浏览器的会话存储对象中,以便在完成后将数据保存在请求之间并进行清理。 https://developer.mozilla.org/en/docs/Web/API/Window/sessionStorage
// Save data to sessionStorage
sessionStorage.setItem('key', 'value');
// Get saved data from sessionStorage
var data = sessionStorage.getItem('key');
// Remove saved data from sessionStorage
sessionStorage.removeItem('key')
答案 1 :(得分:0)
不会自动保留Javascript变量。当您在浏览器中打开新URL时,不会再次下载JS文件(它们被缓存),但是在新页面中从头开始 。这意味着所有以前的值都会丢失,不是偶然而是设计。
您有不同的方法来处理页面问题之间的持久性。一种方法是使用会话服务器端:
另一种方法是单页面应用程序模式:
此外,您可以使用Windows.sessionStorage
在客户端会话期间存储数据客户端 - 应该在@AmitParashar中获得此信用,在答案中提供更多详细信息。
你当然可以混合2种模式(这通常在现实世界的应用程序中完成),但你必须知道每个页面加载都会擦除所有客户端的javascript状态
不太常见的模式(AFAIK)是将状态置于cookie中。这样它可以由服务器和客户端共享,但是: