问题 想要在Angular 2中进行路由时阻止组件重新创建


假设我们有两条路线 Dashboard 和 ProfileDashboard 有动态标签功能 Google spreadsheet。我想做一些交互(构建图表,可视化一些数据)创建标签 Dashboard。现在,如果我路由到 Profile 然后路由回来 Dashboard,我希望在这些标签中看到之前的内容 Dashboard。这意味着,我想在客户端保持状态。 AFAIK在组件之间路由时,它重新创建组件。是否可以在使用角度2路由时制作类似应用程序的电子表格?我需要使用路由,因为在我的应用程序中我必须使用LazyLoading功能。

那么这个想法应该是什么?我是角度2的新手。


7763
2017-09-29 05:59


起源

我认为这可能来自路由。我已经阅读了这篇博客,但我自己并未尝试实现您寻求的此类高级路由。 vsavkin.com/angular-2-router-d9e30599f9ea#.2o8b488po - DNRN
我阅读了博客以及vsavkin的新书。但是对我来说理解这个概念太复杂了。这就是我寻求更好更容易理解的原因:/ - pd farhad


答案:


目前组件被重用 只要 当只有路线参数在停留在同一路线时发生变化时。

如果路由已更改,则新路由添加相同组件时的事件将重新创建组件。

首选解决方法是将模型保留在路由更改期间保持活动状态的共享服务中,并使用此服务中的数据还原组件的先前状态。

有人提到有计划支持使用路由器的自定义重用策略,但没有时间表可以使用。

更新

Angular2增加了对自定义重用策略的支持。

也可以看看


13
2017-09-29 06:47



但根据我的要求,我需要创建多个标签 Dashboard(它甚至可能是谷歌电子表格等100个标签)。那我该怎么办?你能发光吗? RouterState? - pd farhad
我不认为 RouterState 相关的。您可能希望查看辅助路由,并且不要离开要显示的当前路线 Profile 而是将其显示为模态或类似。 Aux路线支持似乎仍然有点限于我(尽管他们没有尝试太多)。 - Günter Zöchbauer
我提到 Profile 例如:/但我的应用程序就像在谷歌电子表格中的标签中构建交互并存储这些标签 Dashboard。我需要LazyLoading。我的要求是复杂的,我遇到了初始架构的问题:( - pd farhad
你现在可能会忽略这个限制,并希望Angular团队提供最终提到的解决方案 github.com/angular/angular/issues/7757#issuecomment-236737846 - Günter Zöchbauer
你也可以更换 <router-outlet> 具有自定义组件的组件,不会删除特定组件,而只是隐藏它们。 - Günter Zöchbauer