我有一个有角度的2 rc6应用程序,该应用程序使用角度2路由器将组件加载到路由器插座。这一切一般都很好,但我的问题是,当用户点击链接[routerLink]以获取已经路由到的页面时,他们就会期望该组件重新加载。
重新加载组件似乎不是angular 2路由器的默认行为,相反它似乎认识到组件已经是当前组件并且什么都不做,有人知道如何更改它吗?
答案 0 :(得分:1)
我遇到了同样的问题,无法找到合适的解决方案。此外,每个人最好的朋友谷歌都没有多大帮助。 在我的情况下,我需要一个通用的活动表单重置行为,并重新加载当前组件似乎是一个非常好的方法。当然,重置表单按钮要好得多,但我已经看到很多用户很想重新加载页面(通过多次点击同一个链接)。
我设法欺骗路由器重新加载每个 routerLink 上的组件,并在AppComponent中使用以下代码:
constructor(private router: Router){
// override the route reuse strategy
this.router.routeReuseStrategy.shouldReuseRoute = function(){
return false;
}
this.router.events.subscribe((evt) => {
if (evt instanceof NavigationEnd) {
// trick the Router into believing it's last link wasn't previously loaded
this.router.navigated = false;
// if you need to scroll back to top, here is the right place
window.scrollTo(0, 0);
}
});
}
希望这有帮助
Mihail C。
答案 1 :(得分:0)
目前不支持此功能。 https://github.com/angular/angular/issues/9811 在某处提到过,有计划在以后(最终)之后添加更多关于路由组件重用的控制。
通常你重新初始化像
constructor(route:ActivatedRoute) {
route.params.subscribe(params => initAfterRouteChange(params));
}
如果这不起作用,因为DOM需要重新初始化(例如,因为某些非Angular2库更新了DOM。您可以使用*ngIf
清除组件的DOM并重新启动 - 加上它。
答案 2 :(得分:0)
对我来说,有3个步骤正在帮助解决这个问题。
runGuardsAndResolvers
:“always”添加到路由模块resolve
函数中的数据时,它只在我第一次加载组件时起作用,所以我移动它所有resolve
功能。