Angular 2导航事件

时间:2016-09-29 20:57:05

标签: angular routing navigation

我有一个新的Angular 2应用程序(最新完整版),我希望每次用户导航时都知道当前的url和目标url,无论是通过单击链接还是键入浏览​​器的地址栏。我希望能够决定是否允许他们访问网址,如果不允许他们回到原始网址。我想要在任何一种情况下更新地址栏中的URL。我尝试了以下但是这些并没有提供oldUrl只有NewUrl。

    router.events.subscribe((event: NavigationEvent) =>
    {
        if (event instanceof NavigationStart)
        {

        }

        if (event instanceof NavigationEnd)
        {

        }

        if (event instanceof NavigationCancel)
        {

        }
    });

我很容易在Angular 1中用范围实现这个。$ on('$ locationChangeStart',function(event,newUrl,oldUrl)和scope。$ on('$ routeChangeSuccess',function(evt,newUrl,oldUrl) )。

请帮忙。

1 个答案:

答案 0 :(得分:0)

尝试以下Guard,它提供包含所需URL的oldState和newState。如果有帮助的话,取决于你的用例。

export class PendingChangesGuard implements CanDeactivate<Shipments> {
    constructor(@Inject(ComponentService) private _service:ComponentService){}
    @HostListener('window:beforeunload')
    canDeactivate(component: Shipments,
                  currentRoute: ActivatedRouteSnapshot,
                  currentState: RouterStateSnapshot,
                  nextState: RouterStateSnapshot): Observable<boolean> | boolean {
        console.log(nextState)
        return this._service.getSelectedMaterials().length < 0 ? true : window.confirm("Are you sure you want to Exit??") ;
    }
}