Angular2 router 2.0.0 not reloading components when same url loaded with different parameters?

前端 未结 5 654
轮回少年
轮回少年 2020-11-27 06:34

I have this in my .routing.ts file

export const routing = RouterModule.forChild([
{
    path: \'page/:id\',
    component: PageComponent
}]);
相关标签:
5条回答
  • 2020-11-27 07:10

    Angular 9

    I have used the following and it worked.

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

    }

    In addition it also works for path params.

    0 讨论(0)
  • 2020-11-27 07:16

    This code work for both angular 2 and 4. you need to subscribe the param like below

    selected_id:any;
    constructor(private route: ActivatedRoute) { }
    ngOnInit() 
    {
        this.route.params.subscribe(params => {
        this.selected_id = params['id']; 
        });
    }
    

    suppose still your page not get reloaded, unsubscribe value by using ngOnDestroy.

    ngOnDestroy()
    {
     this.selected_id.unsubscribe();
    }
    

    this will be clear the previous param value

    above logic working for me. hope it will help for you.

    [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
    
    0 讨论(0)
  • 2020-11-27 07:19

    update 2

    This answer is only for a long ago discontinued router version.

    See https://angular.io/api/router/RouteReuseStrategy for how to do it in the current router.

    update 1

    That's now fixed (Angular 2.3) for the new router by https://github.com/angular/angular/pull/13124 which allows to provide a custom reuse strategy.

    For an example see also https://www.softwarearchitekt.at/post/2016/12/02/sticky-routes-in-angular-2-3-with-routereusestrategy.aspx

    original

    https://github.com/angular/angular/issues/9811

    That's a known issue. Currently there is no way to make the router re-create the component on parameter-only route changes.

    They discussed plans to implement some reuse-strategies eventually.

    You can subscribe to params changes and execute your code there instead of in ngOnInit()

    0 讨论(0)
  • 2020-11-27 07:20

    with Angular 7.2, router 7.2 you can do the following.

    constructor(
        private router: Router
    ) {
        this.router.routeReuseStrategy.shouldReuseRoute = function(){
            return false;
        }  
    }
    

    I tried several ways but that was the only way my router did loaded the content of the component I am navigating to.

    you can read more about route reuse strategies here

    0 讨论(0)
  • 2020-11-27 07:26

    with Angular ~8

    constructor(private _router: Router) { 
      this._router.onSameUrlNavigation='reload'}
    

    works fine

    0 讨论(0)
提交回复
热议问题