2016-03-28 5 views
37

existiert Ich habe versucht, 404 / anderen Pfad umgeleitet werden, wenn der Pfad Winkel existiert nicht in 2Angular 2 Wie man 404 oder einem anderen Pfad umgeleitet werden, wenn der Pfad nicht

Ich habe versucht, Forschung gibt es einige Verfahren für Winkel 1, aber nicht eckig 2.

Hier ist mein Code:

@RouteConfig([ 
{ 
    path: '/news', 
    name: 'HackerList', 
    component: HackerListComponent, 
    useAsDefault: true 
}, 
{ 
    path: '/news/page/:page', 
    name: 'TopStoriesPage', 
    component: HackerListComponent 
}, 
{ 
    path: '/comments/:id', 
    name: 'CommentPage', 
    component: HackerCommentComponent 
} 
]) 

So Beispiel, wenn ich /news/page/ dann funktioniert es umleiten und es mir eine leere Seite zurückkehren, wie Sie diese Art von Fall passieren Sie behandeln?

+0

Was verwenden Sie zum Routing? –

+0

Ich benutze @RouteConfig um Route –

+0

zu erstellen Ich aktualisiere nur meine Frage = D thx für die Hilfe –

Antwort

82

können Sie {path: '/*path', redirectTo: ['redirectPathName']}

wie verwenden:

{path: '/home/...', name: 'Home', component: HomeComponent} 
{path: '/', redirectTo: ['Home']}, 
{path: '/user/...', name: 'User', component: UserComponent}, 
{path: '/404', name: 'NotFound', component: NotFoundComponent}, 

{path: '/*path', redirectTo: ['NotFound']} 

, wenn kein Weg zu NotFound Pfad umleiten Spiele dann

für v2.2.2 aktualisiert

In Routing der Version v2.2.2 Name pro Es gibt keine mehr. Route definieren ohne Name Eigentum. so sollten Sie Pfad statt NameredirectTo: '/redirectPath' und keine führende slash für Pfad verwenden, so path: '404' anstelle von path: '/404'

wie:

{path: '404', component: NotFoundComponent}, 
{path: '**', redirectTo: '/404'} 
+2

Sie sind genial, es funktioniert !! Wie oder wo hast du das gelernt? –

+0

Ich habe ein eckiges Testprojekt gebaut und dort habe ich diese Technik benutzt. '/ *' bedeutet alles. Bekomme eine Idee von ** Angular Cheat Sheet ** * Routing und Navigation * Teil. https://angular.io/docs/ts/latest/cheatsheet.html –

+1

, aber dies wird immer noch den Status 200 zurückgeben. Wie gebe ich 404 zurück? – Toolkit

1

Machen Sie Ihre Standard-Route Ihre 404 oder Seite mit einem Controller, der eine harte JavaScript-Umleitung tut.

+0

Entschuldigung Ich denke, ich würde meinen Code für das einfache Verständnis teilen –

+0

einen Blick unter dem App-Modul, siehe die andere Route? Machen Sie das auf eine 404 Seite. https://docs.angularjs.org/tutorial/step_07 –

+0

@DanielvanHeerden Er verwendet Angular2 Routing funktioniert ein wenig anders –

9

Wie shaishab roy sagt, in dem Spickzettel Sie kann die Antwort finden.

Aber in seiner Antwort, die gegebene Antwort war:

{path: '/home/...', name: 'Home', component: HomeComponent} 
{path: '/', redirectTo: ['Home']}, 
{path: '/user/...', name: 'User', component: UserComponent}, 
{path: '/404', name: 'NotFound', component: NotFoundComponent}, 

{path: '/*path', redirectTo: ['NotFound']} 

Aus irgendwelchen Gründen ist es nicht funktioniert auf meiner Seite des Fall ist, so habe ich versucht, statt:

{path: '/**', redirectTo: ['NotFound']} 

und es funktioniert. Seien Sie vorsichtig und vergessen Sie nicht, dass Sie es am Ende setzen müssen, sonst haben Sie oft die 404 Fehlerseite;).

+2

Ich denke, der Grund für deine Seite funktioniert nicht, weil wir noch in der Beta sind und sie haben einige auf der Veröffentlichung ver ändert. btw thx für die Aktualisierung der Antwort = D –

14

Als Angular mit der Veröffentlichung fortfuhr, sah ich mich dem gleichen Problem gegenüber. Wie pro Version 2.1.0 die Route Schnittstelle wie folgt aussieht:

export interface Route { 
    path?: string; 
    pathMatch?: string; 
    component?: Type<any>; 
    redirectTo?: string; 
    outlet?: string; 
    canActivate?: any[]; 
    canActivateChild?: any[]; 
    canDeactivate?: any[]; 
    canLoad?: any[]; 
    data?: Data; 
    resolve?: ResolveData; 
    children?: Route[]; 
    loadChildren?: LoadChildren; 
} 

Also meine Lösungen war die folgende:

const routes: Routes = [ 
    { path: '', component: HomeComponent }, 
    { path: '404', component: NotFoundComponent }, 
    { path: '**', redirectTo: '404' } 
]; 
+0

Dies Angular 5 (ähnlich Ihrer Lösung) funktioniert: const Routen: Routen = [ {Pfad: 'Heimat', Komponente: HomeComponent}, {path: '', redirectTo: '/ home', pathMatch: 'full'}, {Pfad: '404', Komponente: NotfoundComponent}, {Pfad: '**', redirectTo: '/ 404'} ]; –

12

Meine bevorzugte Option auf 2.0.0 und bis eine erstellen 404 Route und erlauben auch eine ** Route Pfad auf die gleiche Komponente zu lösen.Dadurch können Sie mehr Informationen über die ungültige Route protokollieren und anzeigen als eine einfache Umleitung, die den Fehler verbergen kann.

Einfache 404 Beispiel:

{ path '/', component: HomeComponent }, 
// All your other routes should come first  
{ path: '404', component: NotFoundComponent }, 
{ path: '**', component: NotFoundComponent } 

Zur Anzeige der falschen Informationen Route in Import hinzuzufügen innerhalb NotFoundComponent zu Router:

import { Router } from '@angular/router';

Fügen Sie es zu dem constructior von NotFoundComponent:

constructor(public router: Router) { }

Dann können Sie es von Ihrem HTML-Template aus referenzieren, z.

The page <span style="font-style: italic">{{router.url}}</span> was not found.

+0

Wenn ich Ihre Lösung versuche, werden alle Routen zu 404 umgeleitet. Was sieht wie Ihre anderen Routen aus? – Ben

+0

Es wird nicht umgeleitet, es lädt die NotFoundComponent, der ursprüngliche/ungültige Pfad befindet sich immer noch in der URL auf der Seite. – robnordon

+0

Obwohl dieser Ansatz gleich aussieht, besteht der Hauptvorteil dieses Ansatzes darin, dass Sie die Routinginformationen beibehalten. Eine einfache Umleitung wie bei den anderen Antworten verliert den Kontext, und Sie können dann nicht anzeigen, was falsch gelaufen ist, oder eine Protokollierung über eine generische "404" -Seite hinaus bereitstellen. – robnordon

Verwandte Themen