2016-06-03 36 views
32

Come posso impostare un percorso predefinito nella mia raccolta di metadati del percorso @Routes? Se si utilizza il router angular2 da @ angular/router deprecato, si definiscono i percorsi nell'oggetto @routeConfig, che è una raccolta di oggetti route, ma questi oggetti di percorso hanno più attributi su di essi. Ad esempio hanno attributi 'name' e 'useAsDefualt' mentre le route definite da @ angular/router no. Vorrei scrivere la mia nuova app utilizzando il nuovo router, ma come faccio a utilizzare il nuovo router e impostare un percorso predefinito?Router angolare2 (@ angolare/router), come impostare il percorso predefinito?

Questa è la mia componente applicazione principale che definisce miei percorsi:

import { Component } from '@angular/core'; 
import { DashboardComponent } from './dashboard/dashboard.component'; 
import { ConfigManagerComponent } from './configManager/configManager.component'; 
import { ApplicationMgmtComponent } from './applicationMgmt/applicationMgmt.component'; 
import { MergeComponent } from './merge/merge.component'; 

import { ROUTER_DIRECTIVES, Routes } from '@angular/router'; 


@Component({ 
    selector: 'app-container', 
    templateUrl: 'app/app.component.html', 
    directives: [ROUTER_DIRECTIVES] 
}) 

@Routes([ 

     { path: '/Dashboard', component: DashboardComponent }, 
     { path: '/ConfigManager', component: ConfigManagerComponent }, 
     { path: '/Merge', component: MergeComponent }, 
     { path: '/ApplicationManagement', component: ApplicationMgmtComponent } 
]) 

export class AppComponent { } 

Il percorso definizioni sembrano funzionare bene, quando clicco sul tag di ancoraggio come questo:

<li class="nav hidden-xs"><a [routerLink]="['./Dashboard']">Dashboard</a>/li> 

esso transizioni alla rotta associata. Il mio unico problema è che quando viene caricata la mia app non ha una rotta attiva. Come posso definire un percorso predefinito attivo quando l'app si avvia?

Grazie!

risposta

47

V2.0.0 e successivamente

Vedi anche vedere https://angular.io/guide/router#the-default-route-to-heroes

RouterConfig = [ 
    { path: '', redirectTo: '/heroes', pathMatch: 'full' }, 
    { path: 'heroes', component: HeroComponent, 
    children: [ 
     { path: '', redirectTo: '/detail', pathMatch: 'full' }, 
     { path: 'detail', component: HeroDetailComponent } 
    ] 
    } 
]; 

C'è anche il catch-all percorso

{ path: '**', redirectTo: '/heroes', pathMatch: 'full' }, 

che reindirizza gli URL "non valido".

V3-alfa (vladivostok)

Uso percorso / e redirectTo

RouterConfig = [ 
    { path: '/', redirectTo: 'heroes', terminal: true }, 
    { path: 'heroes', component: HeroComponent, 
    children: [ 
     { path: '/', redirectTo: 'detail', terminal: true }, 
     { path: 'detail', component: HeroDetailComponent } 
    ] 
    } 
]; 

RC.1 @ angolare/router

Il router RC non supporta ancora useAsDefault . Come soluzione alternativa puoi navigare in modo esplicito.

Nella componente principale

export class AppComponent { 
    constructor(router:Router) { 
    router.navigate(['/Merge']); 
    } 
} 

per altri componenti

export class OtherComponent { 
    constructor(private router:Router) {} 

    routerOnActivate(curr: RouteSegment, prev?: RouteSegment, currTree?: RouteTree, prevTree?: RouteTree) : void { 
    this.router.navigate(['SomeRoute'], curr); 
    } 
} 
+0

Quando provo a utilizzare Rotuer nel costruttore Typescript si lamenta di non aver trovato "Router". Devo importarlo? – cobolstinks

+0

È necessario importare qualsiasi tipo utilizzato nel file. Se si aggiunge 'Router' come tipo a qualsiasi variabile o parametro, è necessario importarlo. –

+1

Sì, subito dopo che ho postato ho provato questo: importare {ROUTER_DIRECTIVES, Routes, Router} da '@ angular/router'; sembra funzionare ora, grazie! – cobolstinks

8

Il percorso impostato per l'itinerario è "". Esempio per DashboardComponent viene caricato per primo.

@Routes([ 
     { path: '', component: DashboardComponent }, 
     { path: '/ConfigManager', component: ConfigManagerComponent }, 
     { path: '/Merge', component: MergeComponent }, 
     { path: '/ApplicationManagement', component: ApplicationMgmtComponent } 
]) 

Spero che ti aiuti.

+0

avviso che, in carico, app navigare a '' DashboardComponent' ma URL' sarà vuoto invece di '/ dashboard' – tchelidze

+0

Grazie per la fornitura di questo approccio. L'unica cosa che esita è che la route non è esplicitamente referenziata nell'URL. Vorrei mantenere il suffisso/Dashboard sull'URL. Ma altrimenti funzionerebbe molto bene. – cobolstinks

1

Con la versione corrente di angolare 2 non si può usare '/' su un percorso o di dare un nome alla rotta . Quello che puoi fare è creare un file di percorso come "app.routes.ts" e importare i tuoi componenti, assicurati del percorso durante l'importazione.

import { Component } from '@angular/core'; 
import { DashboardComponent } from './dashboard/dashboard.component'; 
import { ConfigManagerComponent } from './configManager/configManager.component'; 
import { ApplicationMgmtComponent } from './applicationMgmt/applicationMgmt.component'; 
import { MergeComponent } from './merge/merge.component';` 

Add:

import {RouterConfig, provideRouter } from '@angular/router'; 

Poi i percorsi:

const routes:RouterConfig = [  
    { path: 'Dashboard', component: DashboardComponent }, 
    { path: 'ConfigManager', component: ConfigManagerComponent }, 
    { path: 'Merge', component: MergeComponent }, 
    { path: 'ApplicationManagement', component: ApplicationMgmtComponent } 
]; 

quindi esportare:

export const APP_ROUTER_PROVIDERS = [ 
    provideRouter(routes)] 

Nei tuoi main.ts importare APP_ROUTER_PROVIDERS e aggiungere bootstrap i fornitori di router alla ma in.ts come questo:

bootstrap(AppComponent,[APP_ROUTER_PROVIDERS]); 

Infine, il tuo link sarà simile a questo:

li class="nav hidden-xs"><a [routerLink]="['./Dashboard']" routerLinkActive="active">Dashboard</a>/li> 
1

avete solo bisogno di aggiungere altro parametro nel vostro percorso, il parametro è useAsDefault: vero. Ad esempio, se si desidera che la DashboardComponent come predefinito quello che devi fare questo:

@RouteConfig([ 
    { path: '/Dashboard', component: DashboardComponent , useAsDefault:true}, 
    . 
    . 
    . 
    ]) 

raccomando di aggiungere i nomi ai tuoi percorsi.

{ path: '/Dashboard',name:'Dashboard', component: DashboardComponent , useAsDefault:true} 
0

Il percorso deve essere lasciato vuoto per renderlo componente predefinito.

{ path: '', component: DashboardComponent }, 
+0

Questo suggerimento è già contenuto in un'altra risposta. – Alexei

3

In Angular 2+, è possibile impostare il percorso verso la pagina predefinita aggiungendo questo percorso al modulo del percorso. In questo caso l'accesso è il mio percorso di destinazione per la pagina predefinita.

{path:'',redirectTo:'login', pathMatch: 'full' }, 
2

Ho affrontato lo stesso problema applicare tutte le possibili soluzioni, ma alla fine questo risolvere il mio problema

export class AppRoutingModule { 
constructor(private router: Router) { 
    this.router.errorHandler = (error: any) => { 
     this.router.navigate(['404']); // or redirect to default route 
    } 
    } 
} 

Spero che questo vi aiuterà.

-1

Add percorso verso la pagina di default

$routeProvider 
    .when("/db", { 
     templateUrl: "/home/dashboard" 
    }) 

Poi nella pagina di destinazione aggiungere il seguente script.

$(document).ready() 
{ 
    window.location = "/#!db"; 
}; 
+1

Che presuppone hashlocationstrategy e utilizza jquery. Nessuno dei quali sono disposto a usare. A questa domanda è stata data risposta molto tempo fa. – cobolstinks

Problemi correlati