如果路由到相同的参数,角度不会重新加载

Posted

技术标签:

【中文标题】如果路由到相同的参数,角度不会重新加载【英文标题】:Angular not reload if route to same param 【发布时间】:2019-02-03 21:31:36 【问题描述】:

我想在每次单击按钮时重新加载页面 article/:id,Angular 能够在 :id 更改时重新加载页面,但如果路由到相同的 :id,那么它会忽略更改。

export class DocumentComponent 
    constructor(
        private activatedRoute: ActivatedRoute,
        private router: Router
    ) 

    ngOnInit() 
        this.routeSubscription = this.activatedRoute.params.subscribe(params => 
            this.reloadPage(+params['id']);
        );
    

    clickReload(id: number) 
        this.router.onSameUrlNavigation = 'reload';
        this.router.navigate(['article', id]);
    

当参数改变时,会触发可观察的params,并执行reloadPage()。但是,当我尝试重新加载相同的 params 时,Angular 会忽略它,我该如何重新加载相同的 param

article/123 --> article/456 [ok]
article/111 --> article/222 [ok]
article/666 --> article/666 [not ok, how?]

我尝试使用onSameUrlNavigation,但它不起作用......我做错了什么吗?

【问题讨论】:

您究竟为什么希望它重新加载 BTW? activatedRoute.params 是一个 BehaviorSubject,它只在新值发生变化时推送它。由于id 没有变化,因此不会触发变化。 How to reload the current route with the angular 2 router的可能重复 How to reload the current route with the angular 2 router的可能重复 【参考方案1】:

您需要检查 id 是否相同,然后重新加载页面。你可以这样做:

clickReload(id: number) 
    if(id == this.activatedRoute.snapshot.params.id) 
        window.location.reload();    //if id is same then just reload the page
     else 
        this.router.navigate(['article', id]);
    

【讨论】:

【参考方案2】:

您可以像下面这样添加并删除验证.. 只需导航就足够了。

@NgModule(
  imports: [RouterModule.forRoot(routes, 
    onSameUrlNavigation: 'reload',
    enableTracing: false
  )],
  exports: [RouterModule]
)

例子:

https://stackblitz.com/edit/mlc-onsameurlnavigation-activatedroute?file=app%2Fapp-routing.module.ts

【讨论】:

以上是关于如果路由到相同的参数,角度不会重新加载的主要内容,如果未能解决你的问题,请参考以下文章

当 url 匹配相同的路由时,React 路由器不会重新加载页面

角度路由器导航然后重新加载

查询参数更改时,角度路由器导航不会加载页面

React 不会在路由参数更改或查询更改时重新加载组件数据

Angular2路由器2.0.0在加载不同参数的相同url时不重新加载组件?

更改 url 参数时反应路由器不重新加载组件