2016-09-29 4 views
2

新しいAngular 2アプリケーション(最新のフルリリース)があり、リンクをクリックするかブラウザのアドレスバーに入力するかによってユーザーがナビゲートするたびに、現在のURLとターゲットURLを知りたい。私は、彼らがURLに行くことを許可されているかどうか、そしてそれらを元のURLに戻さないのかどうかを判断できるようにしたい。いずれの場合でもアドレスバーのURLを更新したい。私は以下を試しましたが、これらはnewUrlだけoldUrlを提供しませんでした。角度2のナビゲーションイベント

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

     } 

     if (event instanceof NavigationEnd) 
     { 

     } 

     if (event instanceof NavigationCancel) 
     { 

     } 
    }); 

私は簡単範囲で角度の1でこれを達成することができました。$( '$ locationChangeStart'、機能(イベント、NEWURL、oldUrl)と範囲に。$( '$ routeChangeSuccess' に関する、機能(EVT 、NEWURL、oldUrl)。

助けてください。

+0

CanActivateをチェックしてくださいユーザーがナビゲートできるかどうかを判断するためのガードしかし、目標と最後のURLを取得する方法を確認していない。 https://angular.io/docs/ts/latest/guide/router.html#!#can-activate-guard – cboston

+0

お返事ありがとうございます。私はCanActivateで既にガードを設定していますが、newUrlとoldUrlを私に与えません。 – LanceM

答えて

0

を以下のガードを試してみて、それが与えることができます場合は、あなたがしたい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??") ; 
    } 
}