我有一个用perl-dancer和angular编写的项目。我使用谷歌作为openId系统。
我的一些页面有一个带有保存按钮的编辑网格。为了避免在会话(从perl-dancer创建的会话)到期时丢失未保存的数据,我有一个角度拦截器,它监听401服务器错误并打开一个角度模式,持有"谷歌登录"按钮(会话到期后在服务器请求时触发)。
我已在新标签页上设置谷歌表单的开头,而不是从原始页面重定向,以避免丢失可能未保存的数据。
在成功进行Google身份验证后,新标签会重定向到项目主页,并且原始文件会保留在开放模式中,并保持" google登录"按钮。
好了,现在可以关闭新标签页,在原始窗口中,模式关闭,未保存的数据仍然存在。
但是,从用户体验的角度来看,由于不允许嵌入谷歌登录表单或类似内容而导致这种糟糕的解决方案似乎是一个糟糕的解决方案。
解决方案,建议,帮助?!
答案 0 :(得分:0)
一个建议是检查拦截器中的$state
(或其他一些服务),以便在localStorage中设置一个标志,指示用户正在处理数据。
然后有一个针对这种情况的特殊路线,它只是告诉用户关闭窗口并继续编辑/保存在他们打开的上一个窗口中
然后在应用程序启动时会有几种不同的方式,您可以检查localStorage以获得此标志,以便重定向到该特殊路径。
在该路由的控制器内清除localStorage标志。您甚至可以使用localStorage events
自动关闭上一个窗口中的模态