在Angular4中切换路线时防止重新加载组件

在Angular4中切换路线时防止重新加载组件,angular,Angular,我有这样一个页面: 有两个标签:A和B,点击A时,插座将显示组件A,点击B时显示组件B 现在单击标签B并显示组件B,然后单击标签A,然后单击B,组件将通过ngOnInit重新加载。 问题是: 如何防止组件B在A和B之间切换时重新加载,我只想初始化组件B一次 我使用angularservice维护组件的所有数据,并调用组件构造函数中的相关函数将这些值分配给组件的局部变量/对象 因此,在每个开关上,都会调用组件的构造函数,并从服务中获取属性 如果不是constructor如果您不想在更改路由时重新

我有这样一个页面:

有两个标签:A和B,点击A时,插座将显示组件A,点击B时显示组件B

现在单击标签B并显示组件B,然后单击标签A,然后单击B,组件将通过ngOnInit重新加载。 问题是:


如何防止组件B在A和B之间切换时重新加载,我只想初始化组件B一次

我使用angular
service
维护组件的所有数据,并调用组件构造函数中的相关函数将这些值分配给组件的局部变量/对象

因此,在每个开关上,都会调用组件的构造函数,并从服务中获取属性


如果不是
constructor
如果您不想在更改路由时重新加载组件,那么您也可以在
ngOnInit()
中执行相同的调用。为什么不简单地将组件放在页面中并相应地隐藏/显示它们呢?请检查我创建的示例:


您是否考虑过使用解析器?如果组件中包含重的东西,那么糟糕的解决方案IMHO会严重影响性能。@Sampgun我不确定我是否将此问题称为糟糕的解决方案。但如果你有更好的想法,我很乐意投票支持你的解决方案。我现在没有时间写答案,但基本上用一个主题(在一些工厂)来保存两条路线的最后状态就可以了。另外,如果我没有弄错的话,可以自定义Angular
routesReusingStrategy
来实现相同的目标。这里,类似的东西(没有测试,但我必须做类似的事情,所以我可以更新这个问题。我会为此添加书签。)感谢分享链接。我同意你的看法,我们可以使用“路由使用策略”,这可能是一个更好(更理想)的解决方案。但是,我不清楚它是如何影响性能的?问题是只调用组件B的ngOnInit一次,我不确定是否使用“RouterUseStrategy”会有任何区别。