2016-11-04 29 views
0

ルータの無効化イベントが発生したときにクリックされたルートのURLを渡すことはできますか?私は、リンクのURLを取得することができる午前 私はここにplunkerのデモを行っている canDeactivate(Url:any) { console.log(Url); return false; } 以下のように私は私のコンポーネントでこのルータの無効化イベントが発生したときにクリックされたリンクのURLを取得

import { Injectable } from '@angular/core'; 
import { CanDeactivate} from '@angular/router'; 
import { Observable } from 'rxjs/Observable'; 
export interface CanComponentDeactivate { 
canDeactivate:() => Observable<boolean> | Promise<boolean> | boolean; 
} 
@Injectable() 
export class CanDeactivateGuard implements CanDeactivate<CanComponentDeactivate> { 
constructor(public activeroute:ActivatedRoute){ 

} 
canDeactivate(component: CanComponentDeactivate) { 
return component.canDeactivate ? component.canDeactivate(URL) : true; 
} 
} 

とDeactivateイベントのような非アクティブ化gaurd何かを持っているhttp://plnkr.co/edit/0zLwIoUK7hxm5qZWzsye?p=previewがクリックされたが、それはありますProperty _futureSnapShot Doesnot exist on type ActivatedRouteのようなタイプのエラーを示しています。ルータの非アクティブ化イベントが発生したときにクリックされたルートのURLを取得するための良いプラクティスがあります。

答えて

0

router.eventsをコンストラクタにrouter: Routerを注入すると使用できると思います。

router.events.subscribe((val) => { 
    console.log(val);   
}); 

valには、ルートのURLが含まれます。

これが役に立ちます。

+0

私はルータのイベントを注入してデモhttp://plnkr.co/edit/0zLwIoUK7hxm5qZWzsye?p=previewを更新し、非アクティブ化イベントが発生したときにURLを渡しましたが、初めて非アクティブ化すると値が未定義になりますイベントは起動されます。次のステップ:危機センターのリンクをクリックしてから英雄をクリックします。コンソールウィンドウを開くと、渡された値が表示されます –

+0

私はあなたのプランナーデモをフォークしました(http://plnkr.co/edit/BGrfAa5CQanfFKcmhgf6? p = preview) – hakany

+0

私はいくつかの変更を加えました:1)app/route.service.tsを追加してURLを保存しました.2)app.component.tsに注入ルートを追加して、各ルート変更時にURLを保存しました。 CanDeactivateGuardでURLを読み取ります。 route.events.subscribeは非同期関数なので、URLを設定するには数ミリ秒かかります。そのため、CanDeactivateでURLを読み取っても定義されていないことがあります。その場合は、タイムアウトを設定するか、urlが定義されるまで待つようにしてください。 – hakany

関連する問題