Angular 2 即使没有导航到它也能保持路线活动状态

Angular 2 keep route alive even when not navigated to it

本文关键字:持路 活动状态 导航 Angular      更新时间:2023-09-26

在 angular 2 中,有没有办法让导航路线保持活动状态,即使它没有被导航到?我这样做的目的是我试图将 webgl 画布放入角度 2 路线中。现在,默认情况下,每当导航到路由时,它都会初始化组件并加载所有需要的资源,然后在导航离开时会破坏组件并从 Dom 中删除视图。使用webgl时,这会导致2个问题,主要是只允许特定数量的webgl实例,否则它可能会使显卡过载。因此,如果多次导航到路由并离开路由,则有可能达到限制,因为每次导航到路由时都会创建一个新的 webgl 实例。此外,webgl 通常需要复杂的变量和资源,如果能够保持这些变量处于活动状态,这样它们就不必再次加载,在某些情况下甚至会在路由之外使用它们。

所以我提出的解决方案是保持组件活动但隐藏,以便资源和变量保持活动状态,有什么办法可以做到这一点吗?

我认为您可以尝试使用CanReuse界面及其routerCanReuse。如果组件实现此方法并返回 true,则不会销毁该组件,并且将跨路由重用相同的组件实例:

@Component({
  selector: 'my-cmp',
  template: `
    (...)
  `
})
class MyCmp implements CanReuse, OnReuse {
  routerCanReuse(next: ComponentInstruction, prev: ComponentInstruction) {
    return true;
  }
}