2017-11-15 3 views
1

Ich habe einen Standard sidenav Layout entlang der Linien dieserscharfkantiges Material SideNav Inhalt Strategie

<mat-sidenav-container> 

    <mat-toolbar></mat-toolbar> 

    <router-outlet></router-outlet> 

    <mat-sidenav></mat-sidenav> 
    <mat-sidenav position="end"></mat-sidenav> 

</mat-sidenav-container> 

ich das zweite sidenav als Content-Bereich verwendet werden soll.

Bei diesem Projekt sind alle aktiven Routen einfach Komponenten mit einem Canvas-Bereich und einige grundlegende Informationen über das "Experiment". Vielleicht ein paar grundlegende Schieberegler oder Steuerelemente.

Grundsätzlich möchte ich das Content-Div in den zweiten Sitenav-Container gehen. Nur der Canvas ist visuell ein Kind der tatsächlichen Komponente.

Dies scheint verrückt, ich glaube nicht, dass ein Kind auf diese Weise erreichen sollte und abhängig von einer Elternstruktur. Ich verstehe das. Die Umkehrung, dass die Komponente ein Sitenav hinzufügen würde, wäre viel besser, aber das Sitenav muss zu einem Sitenav-Container gehören und liegt somit immer noch außerhalb der Grenzen der Komponente.

Also, was ist die beste Strategie stattdessen? Ich kann meinen Kopf nicht um mich herum drehen. Würden Sie das als 2 Komponenten sehen, die 2 äußere Anschlüsse benötigen und einen gemeinsamen Dienst benötigen, damit sie miteinander sprechen können? Gibt es einen besseren Weg?

Antwort

1

Wenn ich das richtig verstanden:

  1. Nur die "Leinwand" sidenav die <router-outlet> haben sollte.
  2. Wenn das Sitenav "Canvas" von einer anderen Komponente für seine Daten abhängt, müssen Sie diese Logik in einen separaten Dienst extrahieren. Auf diese Weise kann Ihr Sitenav "Canvas" unabhängig davon seine Daten erhalten.
  3. Wenn Sie noch 2 verschiedene Steckdosen in Ihrer Vorlage benötigen, sollten Sie aux routing verwenden, ABER - wenn Ihr Hauptinhaltsbereich (die Homepage) statisch ist - Sie brauchen keine Route, um sie anzuzeigen, verwenden Sie einfach die "Home" -Komponente in Ihrer Vorlage und halten Sie die <router-outlet> nur in Ihrem "Leinwand" sidenav

hoffe, das hilft!

+0

Ich habe meine Frage aktualisiert. Würden Sie meine Canvas-Komponente in 2 Komponenten aufteilen? 'canvas-component' und' canvas-component-info'. Dann würde ich 2 Routeranschlüsse benötigen? Eine für die Hauptregion der Seite und eine für die Sitenav? Dann brauche ich einen Service, damit diese miteinander reden können? – Clark

+0

1) Nicht sicher, ob die Canvas-Komponente geteilt werden muss. 2) Wenn Sie 2 verschiedene Steckdosen in Ihrer Vorlage benötigen, sollten Sie [aux routing] (https://Stackoverflow.com/a/34642273/3612903) verwenden, aber wenn Ihr Hauptinhaltsbereich (die Startseite) statisch ist - Sie Sie brauchen keine Route, um es anzuzeigen, verwenden Sie einfach die "home" -Komponente in Ihrer Vorlage und behalten Sie die "outlet" in Ihrem "canvas" side-nav. BTW, Sie haben immer noch 2 '' Elemente in 1 '' in Ihrem Beispiel. Jeder sollte seinen eigenen '' Wrapper haben. Soweit ich weiß, sollen SideNavs nicht verschachtelt sein. – DotBot

+0

Danke DotBot! Ich werde es mir ansehen, wenn ich zu Hause bin und melde mich wieder! Eine Sache ist, dass Sie 2 sidennavs haben können, aber nicht mehr als 2. https://material.angular.io/components/sidenav/overview – Clark

Verwandte Themen