Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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
Angularjs 跨单页视图翻转和多页翻转维护应用程序状态_Angularjs - Fatal编程技术网

Angularjs 跨单页视图翻转和多页翻转维护应用程序状态

Angularjs 跨单页视图翻转和多页翻转维护应用程序状态,angularjs,Angularjs,随着技术的进步,我们很久以前解决的问题又出现了 回到黑暗时代,当PHP和ASP被认为很棒时,视图状态总是有问题。如果您的页面上有十几个选择组合框,您的用户选择一些组合并点击next,然后意识到他们搞错了并点击浏览器上的back按钮,组合框将返回默认状态,通常选择选项[0]。为了防止出现这种情况,我们必须编写大量的样板代码,将这些组合框的状态保存到cookie、会话变量或其他东西中,这样当用户点击“后退”按钮时,我们可以将组合框重新加载回它们离开时的状态 如果屏幕上有一个datagrid,这个问题

随着技术的进步,我们很久以前解决的问题又出现了

回到黑暗时代,当PHP和ASP被认为很棒时,视图状态总是有问题。如果您的页面上有十几个选择组合框,您的用户选择一些组合并点击next,然后意识到他们搞错了并点击浏览器上的back按钮,组合框将返回默认状态,通常选择选项[0]。为了防止出现这种情况,我们必须编写大量的样板代码,将这些组合框的状态保存到cookie、会话变量或其他东西中,这样当用户点击“后退”按钮时,我们可以将组合框重新加载回它们离开时的状态

如果屏幕上有一个datagrid,这个问题就更加复杂了。因为这样你就必须想出一些巧妙的方法把网格保存到某个地方,以避免再次访问数据库

然后就亮了。浏览器开发人员意识到,由于这个问题,大多数web开发人员即将回到用Cobol编写终端程序的阶段,并在浏览器中添加了UI缓存。这使得我们的网络开发者不再需要担心这个问题,除非是在奇怪的情况下

所以,生活是美好的。然后,有人想出了一个聪明的主意,试图在不费吹灰之力的情况下复制GWT,而所有这些javascript框架使web爆炸式发展。目前我特别处理的是AngularJS 1.2.10,它带有AngularUI。我必须在周五(很可能是周三)之前对这项技术是否是我们当前标准(这几乎是普遍讨厌的)JSF的可行替代方案进行初步评估

因此,我遵循一些指南,将我的头撞在桌子上几次,我有一个有角度的应用程序,有3个实际的HTML页面,每个HTML页面有2个视图

在你去那里之前,请明白我们不能使用它,除非我们可以使用多页JS应用程序。一些将要开发的应用程序已经开发了十年或更长时间,从财务上来说,放弃整个UI重新开始是不现实的。相反,我们会做一些事情,比如将这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路由对我来说完全不切实际

现在,在我的研究中,我发现了以下帖子:

这是有希望的,主要是因为我有一个视图状态对象,我可以将它存储到Redis数据库或会话EJB中,当用户实际跳出angular并跳入遗留Struts应用程序,然后返回angular应用程序,但事实仍然是,在其中一些页面上,这是一个庞大的样板代码,我们将不得不编写,以使其工作

我并不介意在用户进入或离开系统中的HTML页面时,必须手动保存view state对象,并从Redis服务器或其他什么地方读回它。我真正想要的是一种自动生成要保存的对象的方法,而无需编写大量的代码

这可能吗?我一直在阅读ui路由文档,但看起来没有解决这个问题,至少我还没有翻译过

如果这是可能的,我应该看什么控制

谢谢

--------------编辑

我只是想到了一件事。每个单页应用程序都有一个中心作用域。(我基本上要构建一个多个单页应用程序并将它们连接在一起)所以如果我使用命名约定,比如

$scope.viewstate.view-search.searchType
$scope.viewstate.view-search.resultType
$scope.viewstate.view-search.searchState
然后viewstate对象应该是一个js数组,当我创建一个移动到struts.do的函数时,我可以简单地将该数组作为嵌套映射对象保存到Redis服务器。然后,当我的用户返回按钮返回angular应用程序时,我可以使用route系统捕获它,从Redis检索viewstate对象并将其插入我的范围,从而一次重建整个单页应用程序的范围


这行得通吗?

我认为,您有一个非常复杂的问题,就是如何根据页面中的数据量在不同的页面之间保持视图状态。我认为唯一真正有效的方法是编写一个角度服务,然后将其传递到各个页面。正如您已经知道的,该服务是一个单例,您可以在各种控制器中使用它,并且可以使用它来维护所描述的视图状态。下面查看此链接,看看它是否有帮助:


经过一些思考后,您在编辑中提出的建议可能会起作用,但我仍然会使用服务来检索该数据数组,因为这样可以更容易地重新插入到angular scope中

我正在探索类似的angular应用程序