Angular 2 - replace history instead of pushing

前端 未结 2 801
梦谈多话
梦谈多话 2020-12-07 22:40

How to replace a history instead a pushing a new in angular 2\'s new router (rc.1)?

For example Im in a question list (/questions) opening a new modal i

相关标签:
2条回答
  • 2020-12-07 23:17

    If you use

    router.navigate
    

    And then

    location.replaceState
    

    With the exact same path, you can trigger changes that usually happen, as well as replacing the history.

    For example, in your case:

    this.router.navigate(['questions/1']);
    this.location.replaceState('questions/1');
    

    If you need to add parameters to the route, you can create the url for location using

    router.serializeUrl(router.createUrlTree(/* what you put in your router navigate call */));
    

    In your example:

    this.router.navigate(['questions/1', {name:"test"}]);
    this.location.replaceState(this.router.serializeUrl(this.router.createUrlTree(['questions/1', {name:"test"}])));
    

    Update

    It seems the angular router now comes with a replace url option. In your example:

    this.router.navigate(["questions/1"], {replaceUrl:true});
    

    Update 2

    There is a current issue where multiple navigations done in a short amount of time may not replace the URL correctly. As a temporary workaround, wrap the navigate function in a timeout to get each to fire in a separate cycle:

    setTimeout(()=>{
        this.router.navigate(["questions/1"], {replaceUrl:true});
    });
    
    0 讨论(0)
  • You want to use replaceState from the Locations class

    https://angular.io/docs/ts/latest/api/common/index/Location-class.html#!#replaceState-anchor

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