在单个页面视图中保持应用程序状态翻转和多重
那么,随着技术的进步,我们很久以前解决的问题再次出现。
回到黑暗时代,当PHP和ASP被认为是很棒的时候,我们总是在视图状态方面存在问题。 如果你有一个页面上有十几个选择组合框,你的用户选择一些组合和接下来的命中,然后意识到他们搞砸了,并击中浏览器上的后退按钮,组合框会回到默认状态,通常选择选项[0]。 为了防止这种情况发生,我们必须编写一大堆样板代码,将这些组合框的状态保存为cookie或会话变量或其他内容,以便当用户点击后退按钮时,我们可以将组合框重新加载回去到他们离开时的状态。
如果你在屏幕上有一个数据网格,这个问题会更加复杂。 因为那样你就必须想出一些方法来将网格保存在某个地方,以防止再次访问数据库。
然后传来了光。 浏览器开发人员意识到,由于这个问题,大多数Web开发人员已经接近编写Cobol终端程序,并向浏览器添加了UI缓存。 这让我们的webdevs不必担心这个问题,除非在奇怪的情况下。
所以,生活很好。 然后有人提出了一个聪明的想法,试图在没有所有麻烦的情况下复制GWT,并且Web使用所有这些JavaScript框架进行爆炸。 目前专门处理的是AngularJS 1.2.10和Angular-UI。 直到星期五(很可能是星期三),我才能对这项技术是否是我们现有标准(这是非常普遍讨厌的)JSF的可行替代方案进行初步评估。
所以,我遵循一些指南,几次将我的头靠在桌子上,我有一个角度为3的实际HTML页面,每个HTML页面有2个视图。
在你去那里之前,要明白我们不能使用它,除非我们可以做多页JS应用程序。 其中一些应用程序已经开发了十年甚至更长时间,并且在整个用户界面的废弃以及重新开始时都没有经济可行性。 相反,我们会做这样的事情,比如采用这50个struts页面并将它们转换为angular / rest并将它们无缝链接回应用程序的剩余800个struts页面。
所以在我玩这个游戏时,我遇到了我的旧克星。 后退按钮查看状态问题。
我一直在玩UI路线系统。 我可以使用路线系统进行深度链接,这一事实解决了我的部分问题。 但是,如果说我有这样的搜索页面:
view-search
combo: search type [member,nonmember]
combo: result type [detail,summary]
combo: search state {all the states]
textbox: contract number
etc etc etc
并且组合框选择和文本条目的各种组合列出了1000人的列表。 现在用户在数据网格上选择其中一个人,并且您需要查看详细信息。 那么您可以使用路由来执行类似index.html#detail/bob
的事实很酷,但如果用户意识到错误的bob并点击了后退按钮,他们将再次获得空白搜索屏幕,并且必须输入所有内容并且更糟的是,将另一个搜索发送到数据库以重建数据网格。 在搜索数据时,其中一些屏幕有50个或更多选项可供选择,因此试图将所有这些选项放入URL路由中对我来说听起来完全不切实际。
现在在我的研究中,我发现了这篇文章:
通过Angular UI-Router保持状态
主要原因是我有一个视图状态对象,可以将其存储到Redis数据库或会话EJB中,以供用户实际跳出角度并进入传统Struts应用程序时的情况,然后将按钮返回到角度应用程序中,但事实仍然存在,在这些页面中的一部分,这是大量的样板代码,我们必须编写才能使其工作。
我真的不介意必须手动保存视图状态对象,并从Redis服务器读取它,或者任何时候用户在系统中输入或离开HTML页面。 我真正想要的是一种自动生成要保存的对象而无需编写大量锅炉代码的方法。
这可能吗? 我一直在阅读ui-route文档,但它看起来并不像这样,至少不是我已经翻译过。
如果这是可能的,我应该看什么控制?
谢谢
--------------编辑
我只是想到了一些事情。 每个单页面应用程序都有一个中心范围。 (我基本上会建立一个多页单个应用程序并将它们连接在一起)所以,如果我使用命名约定,像这样
$scope.viewstate.view-search.searchType
$scope.viewstate.view-search.resultType
$scope.viewstate.view-search.searchState
然后,viewstate对象应该只是一个js数组,当我创建一个移动到struts.do的函数时,我可以简单地将该数组作为嵌套地图对象保存到Redis服务器。 然后,当我的用户返回到角度应用程序的按钮时,我可以使用路径系统捕获该对象,并从Redis中检索该视图状态对象,并将其重新插入到我的范围中,从而一次性重新构建整个单一页面应用程序的范围。
这会起作用吗?
我相信你有一个非常复杂的问题,试图将不同页面之间的视图状态与页面中的数据量保持一致。 我认为这样做的唯一真正有效的方法是编写一个角度服务,然后可以传递到您的各种页面。 因为您已经知道该服务是一个单例,您可以在各种控制器中使用该单例,并可以按照您所描述的方式使用它来维护视图状态。 这里看看这个链接,看看它是否会有所帮助:http://txt.fliglio.com/2013/05/angularjs-state-management-with-ui-router/
经过一番思考后,你在编辑中建议的内容可能会起作用,但我仍然会使用服务来检索该数据数组,因为这样可以更轻松地重新插入角度范围
我正在为我正在编写的一个Angular应用程序探索类似的东西。 在页面刷新期间保持用户登录很容易。 刷新后在页面上显示状态是一个完全不同的问题。
国家要坚持多久? 我正在评估两种可能性。
首先,将状态(当前表单值或其他)保存到数据库中。 随着页面的变化,逐渐将状态保存到数据库。 在浏览器刷新上检查数据库中保存的值。
其次是使用本地浏览器存储。 这是5兆的存储空间。 5 megs是很多文字。 同样,这些数据将逐渐保存到存储中。 刷新浏览器时,只需从localStorage加载数据即可。
链接地址: http://www.djcxy.com/p/77175.html上一篇: Maintaining application state across single page view flips and multi