2016-10-05 2 views
1

Jeder Abschnitt meiner Seite ist eine separate Komponente, die einer nach dem anderen befindet, während zB Scrollen:Routing auf mehrere Komponenten auf der gleichen Seite

<sectionA></sectionA> 
<sectionB></sectionB> 
<sectionC></sectionC> 

Alle Beispiele, die ich gesehen habe, wo Routings Komponenten zu schaffen auf verschiedenen Seiten, die (in einfachsten Worten) den Container <router-outlet></router-outlet> löschten und ihn mit der Komponente füllten, die der gegebenen Route zugewiesen war.

Was ist mit der Situation, die ich beschrieben habe, wo alle Komponenten auf der gleichen Seite und sichtbar sind?

Wie wird eine richtige Route beim Scrollen zu einem bestimmten Abschnitt festgelegt? Die Idee, die ich habe, besteht darin, eine Direktive zu erstellen, die Klassen hinzufügt, wenn Sektionen sichtbar sind oder nicht, und einen Onscroll-Listener vom Hauptmodul zuzuteilen, der prüft, welcher Bereich gerade sichtbar ist und die Route zuweist. Ist das ein richtiger Ansatz?

Wie zu einem bestimmten Abschnitt verlinken? Mit normalen href=#sectionId oder die eingebauten angular link Direktiven?

Antwort

1

Dazu können Sie Name-Router-Ausgang verwenden wie hier gezeigt

DEMO: https://plnkr.co/edit/91YUcXI1la3B9dxzXSJp?p=preview

App.Component.ts

@Component({ 
    selector:"my-app", 
    template:` 
    <h3>Normal router-outlet</h3> 

    <router-outlet></router-outlet> 

    <hr> 

    <h3>sectionA : named-router-outlet</h3> 
    <router-outlet name='sectionA'></router-outlet> 

    <hr> 

    <h3>SectionB : named-router-outlet</h3> 
    <router-outlet name='sectionB'></router-outlet> 
    ` 
}) 

App. routing.ts

import { Routes,RouterModule } from '@angular/router'; 
import {HomeComponent} from './home.component'; 
import {SectionA} from './sectionA'; 
import {SectionB} from './sectionB'; 


let routes: Routes = [ 
    { path: '', redirectTo: 'home', pathMatch: 'full'}, 
    { path: 'home', component: HomeComponent}, 

    { path: '', outlet: 'sectionA', component: SectionA}, 
    { path: '', outlet: 'sectionB', component: SectionB} 
]; 

export const routing = RouterModule.forRoot(routes); 
+0

Scrolling Teil kann auf eigene Faust leicht getan werden, denke ich. Recht???? – micronyks

+0

Hey sorry für einige Fragen, aber ich bin nicht zu Hause und weiß nicht, wie man die Routen auf Plunker debuggen. Wenn ich möchte, dass die Seite bei Init zu dieser Komponente gescrollt wird, genügt es, den Pfad im Routing zu setzen? Ist mein Ansatz, um den Pfad auf Scroll richtig zu setzen? Oder haben Sie vielleicht einen besseren, natürlicheren "eckigen Weg"? – mjanisz1

+0

Ich habe festgestellt, dass ich die Fragmentoption in der Verknüpfungsdirektive verwenden muss, um auf einen bestimmten Abschnitt der Seite zu verweisen. Aber was ist mit Scrollen zum Teil der Seite beim Hinzufügen einer Route? zB: wenn ich zu '/ sectionb' gehen möchte, möchte ich die Seite laden, aber zu dieser Stelle gescrollt werden – mjanisz1

Verwandte Themen