2016-06-03 9 views
3

ich meine erste Angular Dart App geschrieben habe, aber etwas ist falsch Witz das Routing ...Angular2 Routing gibt 404 beim Nachladen Seite

@Component(
    selector: 'ahpmui', 
    template: ''' 
     <strong>My First Angular 2 App - {{name}}</strong> 
     <br /> 
     <router-outlet> 
     </router-outlet> 
     <br /> 
     <nav> 
      <a [routerLink]="['HomePage']">Home</a> | 
      <a [routerLink]="['DashboardPage']">Dashboard</a> 
     </nav> 
    ''', 
    directives: const [ROUTER_DIRECTIVES], 
    providers: const [ 
     ROUTER_PROVIDERS, 
     HomePage, 
     DashboardPage 
    ] 

) 
@RouteConfig(const [ 
    const Route(path: '/dashboard', component: DashboardPage, name: 'DashboardPage', useAsDefault: true), 
    const Route(path: '/home', component: HomePage, name: 'HomePage') 
]) 
class AppComponent { 

    String name = "Sample App"; 

} 

HomePage:

@Component(
    selector: 'home-page', 
    template: '<strong>This is the Home Page</strong>') 
class HomePage {} 

DashboardPage:

@Component(
    selector: 'dashboard-page', 
    template: '<strong>This is the Dashboard Page</strong>') 
class DashboardPage {} 

main.dart:

// bootstrap angular2 
    bootstrap(AppComponent, [ 
     ROUTER_PROVIDERS, 
     provide(APP_BASE_HREF, useValue: '/'), 
     provide(LocationStrategy, useClass: HashLocationStrategy) 
    ]); 

Wenn meine App startet, geht es wie erwartet auf http://localhost:8080/dashboard, wenn Sie auf den Home Link klicken, geht es korrekt zu http://localhost:8080/home. Wenn ich jetzt die Seite aktualisieren, bekomme ich einen Fehler 404

enter image description here

ich den Bootstrap-Teil dann auf das ändern:

// bootstrap angular2 
    bootstrap(AppComponent, [ 
     ROUTER_PROVIDERS, 
     provide(APP_BASE_HREF, useValue: '/#/'), 
     provide(LocationStrategy, useClass: HashLocationStrategy) 
    ]); 

URLs werden nun wie folgt (ich ziehe es in diesem Stil seit die Legacy-App das gleiche uRL-Format verwendet)

http://localhost:8080/#/dashboard 
http://localhost:8080/#/home 

Wenn ich refresh getroffen, nicht mehr den Fehler 404, aber die Seite umleitet zurück zum 012.342.Seite.

Ich bin mit der App pub serve

Gibt es eine Möglichkeit, in dem onHashChange Ereignisse in den Winkel Router binden kann, so dass, wenn ich http://localhost:8080/#/home aktualisieren, dass es tatsächlich Wege zum HomeComponent mit?

+0

AFAIR das URL-Format ist sowieso so mit 'HashLocationStrategy'. Was passiert, wenn Sie die Zeile 'provide (APP_BASE_HREF, ...)' vollständig entfernen (nicht sicher, ob sie für 'HashLocationStrategy' benötigt wird). Kannst du bitte auch versuchen, '' (anstelle von 'provide (APP_BASE_HREF, ...)') als erstes Element im head tag? –

Antwort

2

Entfernen ROUTER_PROVIDERS, von AppComponent, Sie haben sie in bootstrap() bereits. ROUTER_PROVIDERS sollte nur einmal angegeben werden.

+1

Das Ändern der AppBaseHref auf nur '/' mit dem HashProvider gibt mir auch das gewünschte '/ #/home' URL-Format :-D –

+0

Yup, wie erwartet: D –