我有一个应用程序,在路由后面有视图,我需要能够从路由更改的点继续,但是返回后,组件处于初始状态。
有什么办法可以保持组件的状态?
更新 2
现在, https://github.com/angular/angular/pull/13124为新路由器修复了这个问题(Angular 2.3),它允许提供自定义重用策略。
角文档https://angular.io/api/router/RouteReuseStrategy
更新 2此答案仅适用于很久以前停产的路由器版本。
有关如何在当前路由器中执行此操作,请参阅https://angular.io/docs/ts/latest/guide/router.html#!#guards 。
原来的
如果您的组件实现CanReuse并true
从
routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) {
return true;
}
然后组件被保留和重用,而不是被销毁和重新创建。
另一种方法是将数据保存在共享服务中,并在重新创建组件时从那里获取它们。
在https://github.com/angular/angular/issues/5275中有一个关于这个确切场景的未解决问题
routerCanReuse
只有当新组件和旧组件(当您点击“返回”按钮时)属于相同的组件类型时,您才能使用。
正如 Günter 建议的那样,如果组件类型不同,您现在唯一的选择是将状态保持在共享服务中。