2016-05-11 5 views
3

Ist es möglich, mehrere Routennamen für eine Seite anzugeben, je nachdem, wie der Benutzer auf der Seite angekommen ist, aber den gleichen RouteConfig-Pfad beibehalten hat?Mehrere Routennamen für die gleiche Seite in Angular 2

z.B.

@RouteConfig([ 
    { 
    path: 'sweet/:id', 
    name: 'SweetDetailLandingPage', 
    component: SweetDetailComponent, 
    data: { fromLink: false, fromDeepLink: true } 
    }, 
{ 
    path: 'sweet/:id', 
    name: 'SweetDetailFromLink', 
    component: SweetDetailComponent, 
    data: { fromLink: true, fromDeepLink: false } 
    } 
]) 

Zum Beispiel, wenn der Benutzer die URL in den Browser eingibt, möchte ich die App SweetDetailLandingPage zu laden. Wenn der Benutzer die Seite intern über navigate(['SweetDetailFromLink']) erreicht, möchte ich SweetDetailFromLink laden.

Der Grund ist, weil ich feststellen möchte, ob der Benutzer über eine Deep-Link angekommen ist oder nicht und in der Lage, bestimmte Funktionen auf Last aufrufen.

Ich habe diesen Code ausprobiert, aber die App gibt einen Fehler aus, der besagt, dass ein Konflikt vorliegt.

ORIGINAL EXCEPTION: Configuration 'sweet/:id' conflicts with existing route 'sweet/:id' 

Ich verstehe, warum es einen Konflikt gibt. Ich frage mich nur, ob es eine Möglichkeit gibt, das zu implementieren, was ich oben erklärt habe.

+0

können Sie diese überprüfen in Ihrem Controller stattdessen (wie der Benutzer auf die Seite kam)? – Arg0n

Antwort

2

Ich würde einen anderen Ansatz verwenden. Lesen Sie window.location.href entweder außerhalb oder (wenn es innerhalb von Angular im Konstruktor der Root-Komponente funktioniert) und wenn Sie eine tiefe Verbindung erhalten, dann leiten Sie von dort weiter.

Es gibt nur ein einziges Mal während des Anwendungslebenszyklus, in dem ein Deep Link geladen werden kann, wenn die Anwendung geladen wird. Anschließend führt eine URL-Änderung immer zum Seiten-Reload. Der einzige Weg, Deep-Links zu erreichen danach durch den Code Ihrer Angular Anwendung ist (routerLink oder router.navigateXxx()außer Sie verwenden HashLocationStrategy anstelle des Standard `PathLocationStrategy

0

Was ich in diesem Fall tun würde, ist:. In den routerLinks fügen Sie einen Abfrage-String-Parameter this._router.navigate(['SweetDetailLandingPage', {fromDeepLink: 'true'}]); und dann in der Load-Methode, wo Sie deside wollen, etwas zu tun, wenn Sie von einer tiefen Verbindung oder nicht für diese Parameter fragen kommen:

if (this.getParameterByName('fromDeepLink') === 'true'){ 
    //do something 
}else{ 
    //do something different 
} 
Verwandte Themen