2016-04-25 11 views
2

Ich habe ein ziemlich einfaches Angular 2-Problem. Ich habe eine Hauptansicht mit einer Toolbar oben und einem Router Outlet direkt darunter.Angular 2 Route ändert sich in geschachtelte Komponente

mainView.ts

@Component({ 
    selector: 'pod-app', 
    template: ` 
     <pod-toolbar></pod-toolbar> 

     <router-outlet></router-outlet> <!-- USE THIS router-outlet --> 
    `, 
    directives: [ ToolbarComponent, RouteComponent, ROUTER_DIRECTIVES ], 
    providers: [ 
     EventService, 
     ROUTER_PROVIDERS 
    ] 
}) 

@RouteConfig([ 
    { 
     path: '/list', 
     name: 'ListView', 
     component: ListViewComponent, 
     useAsDefault: true 
    }, 
    { 
     path: '/tileView', 
     name: 'TileView', 
     component: TileViewComponent 
    }, 
    { 
     path: '/pdfView', 
     name: "PdfView", 
     component: PdfViewComponent 
    } 
]) 

export class MainComponent implements OnInit { 
    ...blah...blah...blah 
} 

Dann ist mein toolbar.ts Ich habe die in ihrem Inneren verschachtelt ist die Liste meiner Routennavigation

toolbar.ts

@Component({ 
    selector: 'pod-toolbar', 
    template: ` 
     <div class="demo-toolbar"> 
      <p> 
       <md-toolbar color="primary"> 

        <pod-routes></pod-routes> <!-- appRoutes.ts component --> 

       </md-toolbar> 
      </p> 

     </div> 
    `, 
    directives: [MdToolbar, MdButton,RouteComponent, ROUTER_DIRECTIVES], 
    providers: [ROUTER_PROVIDERS] 
}) 

export class ToolbarComponent implements OnInit { 
    ...blah...blah...blah 
} 

Dann hier sind die Routenverknüpfungen, die in der Symbolleiste verschachtelt sind und die Ansicht unter der Symbolleiste in der Hauptansicht

appRoutes.ts

@Component({ 
    selector: 'pod-routes', 
    template: 
    ` 
     <nav> 
      <a [routerLink]="['/ListView']"><img src="pathto.png" height="45" width="45"></a> 
      <a [routerLink]="['/TileView']"><img src="pathto.png" height="40" width="45" ></a> 
      <a [routerLink]="['/PdfView']"><img src="pathto.png" height="40" width="45" ></a> 
     </nav> 
    `, 
    directives: [ROUTER_DIRECTIVES] 
}) 

export class RouteComponent{ 

} 

Also, was mache ich falsch? Dies ist die Art, wie ich es einrichten möchte, aber wenn das nicht machbar ist, dann könnte ich vielleicht die Routen in die Symbolleiste verschieben und wenn das nicht machbar ist, könnte ich einfach die gesamte Symbolleiste in die Hauptansicht verschieben, was ich nicht mache Ich will es tun, aber wenn ich muss, werde ich es tun.

UPDATE

entfernt ROUTER_PROVIDERS von appRoutes.ts, mit noch gleiche Problem.

UPDATE 2

Added '/' zu url Routen auf Vorschlag der Antwort, gleiche Problem, URL in der Adressleiste ändert aber ui unterhalb der Symbolleiste nicht

UPDATE 3

entfernt providers: [ROUTER_PROVIDERS] von toolbar.ts und mainView.ts Dateien und Bootstrap ROUTER_PROVIDERS in app.ts

bootstrap(MainComponent, [ROUTER_PROVIDERS, provide(LocationStrategy, {useClass: HashLocationStrategy}) ]) 
    .catch(err => console.error(err)); 

Scheint, den Trick getan zu haben. Vielen Dank an Gunter, dass er bei mir geblieben ist und mir geholfen hat, das Problem zu lösen. Sein Plunker hat wirklich geholfen!

+0

dass Bar in der Adresse beachten Sie die url ändert sich korrekt, wenn ich auf die schaltflächen klicke nur die ui ändert sich nicht –

+0

Können Sie einen anderen Browser versuchen? –

+0

Ich denke, du solltest die '@RouteConfig()' auf 'RouteComponent' entfernen oder klären, welche '' für die Routen verwendet werden soll, die du mit den Links in deiner Frage navigierst. –

Antwort

1

update2

Plunker example

Update

Präfix die Routennamen mit / zu sagen, dass die Wurzel Router diese Route navigieren soll:

<a [routerLink]="['/ListView']"><img src="pathto.png" height="45" width="45"></a> 
<a [routerLink]="['/TileView']"><img src="pathto.png" height="40" width="45" ></a> 
<a [routerLink]="['/PdfView']"><img src="pathto.png" height="40" width="45" ></a> 

original

Bieten nicht ROUTER_PROVIDERS mehr als einmal

providers: [ 
    EventService, 
    ROUTER_PROVIDERS 
] 

ROUTER_PROVIDERS sollte genau einmal an der Wurzel Komponente zur Verfügung gestellt werden und nirgendwo sonst (alternativ in boostrap(...))

+0

Ok, ich habe ROUTER_PROVIDERS aus meiner appRoutes.ts entfernt. Immer noch dasselbe Problem, aber behobenes Code-Problem. Danke, Alter! –

+1

Ich habe meine Antwort angepasst. –

+0

danke Gunter, ich habe deine Änderungen in der Frage reflektiert, aber ich habe immer noch das gleiche Problem, dass die URL in der Adressleiste ändert sich zwar korrekt, aber die UI wird nicht aktualisiert, es bleibt auf der gleichen HTML teilweise von der ersten Belastung. –

Verwandte Themen