使用AngularJS进行SPA设计——在一些页面上共享状态,但不是所有页面
SPA design with AngularJS - sharing state across some, but not all, pages
如何在Angular中实现这样的东西:
我有一个多页用户交互,它在页面/控制器之间共享状态。页A启动了一个跨页B、C和d的多页进程。我需要在页B-C- d之间共享状态,但是一旦用户返回到页A(无论是完成,还是中途放弃),共享的B-C- d状态就会消失。
我可以把共享状态放在一个服务中,这样就可以跨页面共享了。但它是整个应用的全局单例。是否有办法确保在事务被放弃或完成时处理服务?
在服务器端,Java EE的世界里,这被称为"对话作用域"——我想知道在Knockout或Angular中是什么意思。
或者有更好的设计方法?我应该使用嵌套控制器吗?
这是一个相当宽泛的问题,肯定会引起一些基于意见的回应。也就是说,您可以依赖的一件事是服务(和工厂)是单例的。这意味着如果您需要在控制器之间共享数据,或者在SPA的整个生命周期中共享数据,您可以创建一个服务来保存和共享该数据。只要页面不重新加载,该服务及其数据就会存在。
共享数据工厂的基本模式如下:// define the shared data service
app.factory("SharedData", function () {
return {
// just one data object for the purposes of the example
sharedDataObject: {}
};
});
一旦你定义了服务,你就可以定义一个使用该服务的控制器,如下所示:
app.controller("FirstController", function ($scope, SharedData) {
$scope.localData = SharedData.sharedDataObject;
});
因为我们已经将共享数据定义为对象而不是作为值绑定到"localData"将允许我们设置值,然后只要页面没有更改就可以检索这些值。我在这里提供了一个示例,显示两个控制器之间共享数据。如果控制器位于不同的视图上,这种模式也同样有效。
我不确定这是否是推荐的模式,但它是我见过的一个,它工作得很好。祝你好运!注 -这个答案在你的问题中被引用-所以它可能不是你想要的。也就是说,我是为其他可能需要在SPA上保存状态的简单方法的人发布的。
如果您将共享状态放入服务中,只需向其添加一个reset()函数,该函数在进入"a "步骤或完成流程时被调用。
我认为你也可以用嵌套控制器来做。您可能仍然需要添加一个reset()函数来处理所有的情况。
- 在Knockoutjs中的ViewModels之间共享变量状态
- new Datamap() 在调用之间保持内存的共享状态
- 在角度上不同控制器之间共享状态
- 如何通过React Native中的组件共享登录状态
- JavaScript-使用sessionStorage保存文档之间共享的复选框状态
- 正在加载ui路由器状态下的共享模型
- Ember JS中控制器之间共享状态的正确方式
- 如果我两次使用相同的反应/冗余组件,它们会共享状态吗?
- 使用工厂时控制器/模板不共享相同的状态
- 摩卡测试共享状态,因为范围不好
- ui路由器——具有一条路由'的URL与另一个具有$stateParams的状态共享同一级别
- 更新React组件共享状态
- 如何在没有闭包的情况下对共享状态进行编程
- 在ui路由器中的状态之间共享ng模型数据
- 在控制器之间共享非单例状态(Angular Architecture)
- 在子组件之间共享父组件状态'州
- 保存公用共享的值状态(添加到URL)
- 如何在angularjs中使用两个不同的ui路由器在状态之间共享作用域数据?
- 当ui-router状态改变时,清除AngularJS共享控制器变量
- 使用AMD和Backbone在模块之间共享对象(或状态)的干净方法