Angularjs 像Durandal一样保持控制器的角度状态?

Angularjs 像Durandal一样保持控制器的角度状态?,angularjs,durandal,Angularjs,Durandal,我喜欢Durandal有Activate/Deactivate方法,可以在VM上调用,甚至可以缓存视图 有没有办法在Angular中使用相同的功能?您可以使用服务/工厂。这些是AngularJS中的单例,您可以将它们注入控制器。严格地说,每个控制器都有一个服务,并且该服务将在导航到视图/控制器之间进行维护 其工作方式是,您的控制器将myService作为注入依赖项。然后将其分配给$scope作为$scope.cache=myService。然后在视图中,为需要缓存的元素绑定到cache.som

我喜欢Durandal有Activate/Deactivate方法,可以在VM上调用,甚至可以缓存视图


有没有办法在Angular中使用相同的功能?

您可以使用服务/工厂。这些是AngularJS中的单例,您可以将它们注入控制器。严格地说,每个控制器都有一个服务,并且该服务将在导航到视图/控制器之间进行维护

其工作方式是,您的控制器将
myService
作为注入依赖项。然后将其分配给$scope作为
$scope.cache=myService
。然后在视图中,为需要缓存的元素绑定到
cache.someProperty

作为旁白:


您甚至可以在控制器之间共享包含状态数据的服务。尽管我会反对这种模式,因为它看起来像一个全局状态。理想情况下,控制器之间共享的服务应该只提供功能,而不是数据对象。除非您专门寻找一个全局数据存储:)

对于那些不熟悉Durandal及其方法的人,您能将您的问题再扩展一点吗?@Studie-当Durandal激活一个路由时,匹配的ViewModel将调用多个方法(如果存在)。ViewAttached、Activate和Deactivate只是我发现非常有用的几个选项。导航到新路线后,durandal可以保留上一条路线。虚拟机引用处于活动状态,以便导航回虚拟机将不必重新加载其所有状态。那么您建议使用什么方法?@MaxWillmo使答案更明确:)因此,当我的控制器再次加载时,我必须从服务中提取所有保存的状态,并将其重新分配到$scope?似乎我应该用$cacheFactory来代替??是否有任何类型的停用在控制器上被调用,以便我知道何时保存我的状态?@Tyler补充道:这样做的方式是,您的控制器将把
myService
作为注入依赖项。然后将其分配给$scope作为
$scope.cache=myService
。然后在您的视图中,您绑定到要缓存的元素的
cache.someProperty
。我更喜欢使用全局状态,以下是我的解决方案: