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

Javascript Angular2路由器2.0.0在相同url加载不同参数时不重新加载组件?,javascript,html,angular,angular2-routing,Javascript,Html,Angular,Angular2 Routing,我的.routing.ts文件中有这个 export const routing = RouterModule.forChild([ { path: 'page/:id', component: PageComponent }]); MyPageComponent文件检查id参数并相应加载数据。在以前版本的路由器中,如果我从/page/4转到/page/25,页面将“重新加载”,组件将更新 现在,当我尝试导航到/page/X,其中X是id时,它只会第一次加载,然后url会更改,

我的.routing.ts文件中有这个

export const routing = RouterModule.forChild([
{
    path: 'page/:id',
    component: PageComponent
}]);
My
PageComponent
文件检查id参数并相应加载数据。在以前版本的路由器中,如果我从/page/4转到/page/25,页面将“重新加载”,组件将更新

现在,当我尝试导航到/page/X,其中X是id时,它只会第一次加载,然后url会更改,但组件不会再次“重新加载”


是否需要传入一些内容以强制我的组件重新加载并调用Ngonit事件?

更新2

这个答案只适用于很久以前停产的路由器版本

有关如何在当前路由器中执行此操作的信息,请参阅

更新1

对于新路由器,这一点现在已经固定(Angular 2.3),通过它可以提供定制的重用策略

有关示例,请参见

原创

这是一个众所周知的问题。 目前没有办法让路由器在仅参数路由更改时重新创建组件

他们讨论了最终实现一些重用策略的计划


您可以订阅参数更改并在那里执行代码,而不是在
ngOnInit()

中执行。此代码适用于angular 2和angular 4。 您需要像下面那样订阅参数

selected_id:any;
constructor(private route: ActivatedRoute) { }
ngOnInit() 
{
    this.route.params.subscribe(params => {
    this.selected_id = params['id']; 
    });
}
假设仍然没有重新加载页面,请使用Ngondestory取消订阅值

ngOnDestroy()
{
 this.selected_id.unsubscribe();
}
这将清除以前的参数值

以上逻辑对我有效。希望对你有帮助

[Info]
var selected_id = this.route.snapshot.paramMap.get('id');
//earlier i was used this code to get param value,it works when navigate from 
//different page but not in the same page reload

使用Angular 7.2和router 7.2,您可以执行以下操作

constructor(
    private router: Router
) {
    this.router.routeReuseStrategy.shouldReuseRoute = function(){
        return false;
    }  
}
我尝试了几种方法,但这是我的路由器加载我正在导航的组件内容的唯一方法

您可以通过Angular ~8阅读更多有关路由重用策略的信息

constructor(private _router: Router) { 
  this._router.onSameUrlNavigation='reload'}
工作正常

9 我使用了下面的方法,效果很好

  onButtonClick() {
     this.router.routeReuseStrategy.shouldReuseRoute = function () {
     return false;
     }
   this.router.onSameUrlNavigation = 'reload';
   this.router.navigate('/myroute', { queryParams: { index: 1 } });
}


此外,它还适用于路径参数。

谢谢,订阅参数效果非常好。我在ANGULAR 4上也面临同样的问题。这个问题有什么解决办法吗?警卫们和这个有什么关系?@MgSam谢谢你的提示。似乎我在更新答案时复制了一个错误的链接-修复了
this.router.RouterUseStrategy.shouldReuseRoute=function(){return false;}
对我来说是有效的,我需要它只工作一次-对于一个特定的
navigate()
,所以它不会干扰路由器在整个应用程序中的工作方式。这个答案合适吗?