您可以从组件本身检查组件实例的存在吗?
您可以销毁现有实例并创建一个新实例吗?
我似乎对我的组件之一有疑问。当使用不同的参数连续访问多次时,组件的ngAfterViewInit仅首次触发(我假设组件实例化的时间)。 后续访问不会引发ngAfterViewInit,,即看起来好像正在重用相同的组件实例或其他东西……但是,我可以识别出参数,并对更改后的参数进行处理。 / p>
但是,如果我访问一条新路线并返回有问题的路线/组件,则它可以正常运行。我可以看到它在新路线和相应组件启动之前就被破坏了。
我的目标是在每次绕行路线时都要重新设定该组件的作用。
所以
您可以从组件本身检查组件实例的存在吗?
可以从代码中销毁现有实例并创建一个新实例吗?
或者还有其他方法可以解决这个问题。
我的设置
延迟加载的模块-> mdm
const routes: Routes = [
{
path: '',
component: HomeComponent,
children : [
{ path: ':id' , component : AComponent }
]
}
菜单锚链接
答案 0 :(得分:0)
肯定有另一种方式。
为回答您,您可能可以检查组件实例的存在,也可以根据需要重新创建它。
但是你不应该。
这不仅是矫kill过正,而且还应该让Angular管理喷油器,否则(如果您不知道自己在做什么),将会遇到一些有趣的问题。
向您简要地解释一下:重新加载路由不会触发组件的生命周期。组件的生命周期在实例化时开始,在销毁时结束(这意味着“不再在DOM中”)。
当您重新加载路线时,该组件不会被破坏,因此是您的问题。
要解决此问题,请在您的生命周期挂钩中订阅路由更改事件:
ngAfterViewInit() {
this.router.events
.pipe(filter(event => event instanceof NavigationEnd))
.subscribe(event => /* do something */);
}
我已经将可观察对象传递给仅监听堆栈的最后一个事件(否则,您的订阅将运行很多次)。