注意。我通过谷歌搜索得到了一组结果,但是,正如我在最后解释的那样,我觉得由于多样性,它们并不可靠。
我有两种实用方法 - 一种用于导航到父节点,另一种用于重新加载自身。第一个按预期工作,而另一个则无法导致重新加载。
navigateToParent(route: ActivatedRoute) {
const options: NavigationExtras = { relativeTo: route };
this.router.navigate([".."], options);
}
navigateToSelf(route: ActivatedRoute) {
this.router.routeReuseStrategy.shouldReuseRoute = () => false;
this.router.onSameUrlNavigation = "reload";
const self = ".";
this.router.navigate([self]);
// const options: NavigationExtras = { relativeTo: route };
// this.router.navigate(["."], options);
}
我按照答案here https://stackoverflow.com/a/57157316/1525840,唯一的例外是我希望导航到的路径是通用的,而不是硬编码的。我尝试过传递不同的参数,例如self="." and self=""等等似乎没有什么可以给我所需的重新加载。
我想念什么?
我也尝试从route传递到服务的方法中,但我只看到一堆可观察值,而不是实际的段。而且当然,this.router.navigate(路线)仅仅导致了一个错误。
谷歌搜索产生了很多提示,建议差异很大(例如this https://stackoverflow.com/questions/56715352/how-to-refresh-element-in-angular-8-without-page-reload),这让我怀疑它可能严重依赖于版本(我使用的是 8.0),而且,许多建议虽然被接受,但从长远来看可能会产生误导,而且更有害,如果没有我意识到它。
好的,下一个示例适用于我,无需重新加载页面:
在路由器组件上,您必须添加“onSameUrlNavigation”
路由器组件:
@NgModule({
imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload' })],
exports: [RouterModule],
})
现在您想要重新加载的组件
constructor(private router: Router){
this.router.routeReuseStrategy.shouldReuseRoute = () => {
return false;
};
}
someFunction(){
this.router.navigateByUrl('/route');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)