在已激活的路由上刷新数据-重新路由到它

时间:2019-04-01 14:58:46

标签: angular angular-routing

我想通过再次路由到同一路由器来刷新数据。当有第二个(或更多)路由到当前激活的路由时,Angular不会激活ngOnInit组件功能。我想启用每当路由时刷新组件上的数据(即使它已经激活的路由)。我知道执行此操作的技术很少,但是我想使用RouterEvent和
NavigationEnd技术。我知道我需要在导航栏中设置onSameUrlNavigation RouteModule。 由于某种原因,我无法达到所需的方案。 看我的代码: 这是单击按钮时触发的事件(单击按钮两次应将两次路由到同一组件):

openMapTool(item: MapToolsItem)
{
   this.router.navigate([{ outlets: { <Name of router outlet>: ['SomePath', { param1: value1}] }}],);
  return false;
}

这是与“ SomePath”路径相关的组件(请参见下文-“ SomeComponent”)-应该路由两次的组件:

 ngOnInit() {
this.subs.push(this.route.events.pipe(
  filter(e => e instanceof RouterEvent && e instanceof NavigationEnd),
).subscribe(e => 
  {
    this.doSomething(e.paramMap);
  }));

这是包含“ SomePath”路径的模块:

const routes: Routes = [

{ path: 'SomePath', component: SomeComponent, outlet: 'SomeRouterOutlet'}];

@NgModule({
imports: [
RouterModule.forChild(routes),
RouterModule.forRoot(routes, {onSameUrlNavigation:'reload'})]}) 

谢谢您的帮助

2 个答案:

答案 0 :(得分:0)

看起来您的组件已缓存,然后重新使用。检查是否在您的app.module.ts中定义了RouteReuseStrategy。在这种情况下,您应该以编程方式从RouteReuseStrategy类的缓存中清除组件。

app.module.ts

providers: [
    { provide: RouteReuseStrategy, useClass: <class name>}

要访问app.module.ts中定义的类,请使用Router.routeReuseStrategy

答案 1 :(得分:0)

您可以尝试订阅routePrams并采取相应的措施。

this.route.params.subscribe(params =>
  // Do something
});