22

我有一个应用程序,在路由后面有视图,我需要能够从路由更改的点继续,但是返回后,组件处于初始状态。

有什么办法可以保持组件的状态?

4

2 回答 2

19

更新 2

现在, https://github.com/angular/angular/pull/13124为新路由器修复了这个问题(Angular 2.3),它允许提供自定义重用策略。

有关示例,另请参见https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

角文档https://angular.io/api/router/RouteReuseStrategy

更新 2此答案仅适用于很久以前停产的路由器版本。

有关如何在当前路由器中执行此操作,请参阅https://angular.io/docs/ts/latest/guide/router.html#!#guards 。

原来的

如果您的组件实现CanReusetrue

routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) {
  return true;
}

然后组件被保留和重用,而不是被销毁和重新创建。

另一种方法是将数据保存在共享服务中,并在重新创建组件时从那里获取它们。

于 2016-03-15T12:03:40.690 回答
3

在https://github.com/angular/angular/issues/5275中有一个关于这个确切场景的未解决问题

routerCanReuse只有当新组件和旧组件(当您点击“返回”按钮时)属于相同的组件类型时,您才能使用。

正如 Günter 建议的那样,如果组件类型不同,您现在唯一的选择是将状态保持在共享服务中。

于 2016-06-18T08:18:06.070 回答