-
您可以检查组件本身的组件实例吗?
-
您可以破坏现有实例并创建一个新实例吗?
我似乎对其中一个组件有问题。当多次使用不同的params组件的NGAFTERVIEWINIT访问多次时,仅第一次触发(我假设何时插入组件时)。随后的访问不会导致发射ngafterviewinit, ie,看起来好像是在重复使用相同的组件实例或其他内容...但是,我可以识别参数并使用更改的参数来做到这一点.. <</p>
但是,如果我访问一条新路线,然后回到有关的路线/相关路线,则正常工作。我可以看到它在新路线和相应组件开始之前就被破坏了。
我的目标是每次绕路线时重新加入组件。
so
-
您可以检查组件本身的组件实例吗?
-
您可以从代码中销毁现有实例并创建一个新实例吗?
或还有其他方法可以解决此问题。
我的设置
懒惰的负载模块 -> MDM
const routes: Routes = [
{
path: '',
component: HomeComponent,
children : [
{ path: ':id' , component : AComponent }
]
}
菜单锚固链接
- MDM/1000
- MDM/2000等
肯定还有另一种方法。
要回答您,您可能可以检查组件实例的存在,并且您可以根据需要重新创建它。
但是你不应该。
这不仅是过度的,而且还应该让Angular管理喷油器,否则(如果您不知道自己在做什么),您会遇到一些有趣的问题。
向您简要解释:重新加载路线不会触发组件的生命周期。一个组件的生命周期开始于实例化时,并在被摧毁时结束(这意味着"不再在DOM中")。
当您重新加载路线时,组件不会被破坏,因此您的问题。
要解决这个问题,请在您的生命周期挂钩中订阅更改事件:
ngAfterViewInit() {
this.router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(event => /* do something */);
}
我只能听取堆栈的最后一个事件(否则,您的订阅将经过很多次)。