2017-10-17 2 views
2

J'ai récemment commencé à utiliser angular/flex pour la première fois et je ne suis pas sûr de l'imbrication du conteneur layout. Dans le code ci-dessous, la balise de navigation est un sidenav à matériau angulaire qui s'ouvre à gauche, puis pousse le reste du contenu vers la droite. J'ai remarqué à ce moment-là (quand je viens de commencer ce n'était pas comme ça) que le sidenav semble tarder un peu quand je l'ouvre/ferme. il se fige à mi-chemin dans l'animation pendant quelques secondes, puis s'ouvre/se ferme complètement. J'ai imbriqué la colonne et plus de conteneurs fxLayout ligne dans un conteneur fxLayout ligne et pense que cela pourrait être la raison du problème de performance d'animation sidenav? Est-ce que je complique les choses en imbriquant tous ces conteneurs, ce qui entraîne des problèmes de performance?bonne pratique pour imbriquer les conteneurs fxLayout?

mon code:

<div fxLayout fxAlign="start start"> 
    <mat-toolbar color="primary"> 
     <button mat-icon-button (click)="toggleSidenav()"> 
      <mat-icon aria-label="menu"> 
       <i class="material-icons">restaurant_menu</i> 
      </mat-icon> 
     </button> 
     <span>POC Toolbar</span>    
     <span class="fill-remaining-space"></span> 
     <div class="rhs"> 
      <mat-icon class="rhs-icon fa fa-home fa-lg"></mat-icon> 
      <span class="rhs-item">Home</span> 

      <mat-icon class="rhs-icon fa fa-sign-out fa-lg" aria-hidden="true"></mat-icon> 
      <span class="rhs-item">Logout</span> 

      <mat-icon class="rhs-icon fa fa-key fa-lg"></mat-icon> 
      <span class="rhs-item">Password</span> 

      <mat-icon class="rhs-icon fa fa-sitemap fa-lg"></mat-icon> 
      <span class="rhs-item">Site map</span>   
     </div> 
    </mat-toolbar> 
</div> 

<div fxLayout="row" fxLayoutAlign="start" fxLayoutGap="20px"> 
    <div fxFlex> 
     <navigation [state]="showMenu"></navigation> 
    </div> 

    <div fxFlex="100%"> 
     <div fxLayout="column" fxLayoutGap="20px"> 
      <div> 
       <h1>Dashboard</h1> 
      </div> 
      <div> 
       <p>Lorem ipsum dolor sit amet, eum iuvaret delicata at. Eu postea commodo persius mei. Id est semper constituto, ignota aperiri adversarium ne vix. Id est impetus suscipit, nulla meliore epicuri id eos. Ad pro modo albucius atomorum. At mel ullum libris debitis, in vero apeirian mediocrem mei.</p> 
      </div> 
      <div> 
       <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p> 
      </div> 
      <div> 
       <h2>Sample Angular/Flex Column Layout</h2> 
      </div> 
     </div> 
     <div fxLayout fxLayoutGap="15px"> 
      <div fxFlex="33%">    
        <h3>Notes</h3> 
        <ul> 
         <li>we're using responsive css &amp; Angular(Angular-material &amp; Angular/flex) This allows us to show (or hide) things like the left menu and the number of columns displayed by dataTables.</li> 
         <li>The amount of "Custom" css we've used is actually very little, prefering rather to make use of the framework's built in features.</li> 
         <li>Angular reactive forms and validators should probably replace the generic php form.</li> 
         <li>No server side php is used.</li> 
        </ul> 
      </div> 
      <div fxFlex="33%"> 
       <h3>Example views</h3> 
       <ul> 
        <li><a href="#">Login Screen</a></li> 
        <li><a href="#">Home Page</a> &raquo; Ledger system &raquo; Sales ledger &raquo; Customer master files</li> 
        <li><a href="#">Customer Master Search</a></li> 
        <li><a href="#">Customer Master List</a></li> 
        <li><a href="#">detail Customer Master</a></li> 
        <li><a href="#">update Customer Master</a></li> 
        <li><a href="#">detail Account</a> - Click on suburb <i class="fa fa-info-circle"></i></li> 
        <li><a href="#">Lookup Screen(Generic)</a> - Click on suburb <i class="fa fa-search"></i></li> 
       </ul> 
      </div> 
      <div fxFlex="33%"> 
       <h3>Keyboard Shortcuts</h3> 
       <ul> 
        <li><Ctrl + b: Go back/li> 
        <li>Ctrl + i: Launch info</li> 
        <li>Ctrl + h: Launch help</li> 
        <li>Ctrl + l: Show or hide menu</li> 
        <li>Ctrl + n: Add new item</li> 
        <li>Ctrl + p: Print</li> 
        <li>Ctrl + r: reload table data</li> 
        <li>Ctrl + <em>any other</em> page specific function you ned</li> 
       </ul> 
      </div> 
     </div> 
    </div> 
</div> 

my navigation component html: 


<mat-sidenav-container position="start" class="custom-sidenav-container"> 

    <mat-sidenav #sidenav mode="side" opened="false"> 
     Navigation 
     <ul class="sn-list"> 
      <li>      
       <mat-icon class="sn-item"> 
        <i class="material-icons">dashboard</i> 
       </mat-icon> 
       <a class="sn-item" href="#">Dashboard</a>  
      </li> 
      <li> 

       <mat-icon class="sn-item"> 
        <i class="material-icons">archive</i> 
       </mat-icon>    
       <span class="sn-item" [matMenuTriggerFor]="stockSystemMenu">Stok System</span> 

       <mat-menu [overlapTrigger]="false" #stockSystemMenu="matMenu"> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 1</span> 
        </button> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 2</span> 
        </button> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 3</span> 
        </button> 
       </mat-menu> 
      </li>   
      <li> 
       <mat-icon class="sn-item"> 
        <i class="material-icons">shopping_cart</i> 
       </mat-icon> 
       <span class="sn-item" [matMenuTriggerFor]="salesMenu">Sales/Purchases</span> 
       <mat-menu [overlapTrigger]="false" #salesMenu="matMenu"> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 1</span> 
        </button> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 2</span> 
        </button> 
        <button mat-menu-item> 
         <mat-icon class="sn-item"> 
          <i class="material-icons">chevron_right</i> 
         </mat-icon> 
         <span class="sn-item">Service 3</span> 
        </button> 
       </mat-menu>   
      </li>  </ul> 
    </mat-sidenav> 
    <div class="sn-content">  
    </div> 
</mat-sidenav-container> 
+0

Je ne peux pas dire si vous faites cela déjà dans la balise de navigation , mais je suggère d'utiliser le composant matériel sidenav [https://material.angular.io/components/sidenav/overview](https://material.angular.io/components/sidenav/overview) – ender

+0

J'utilise le matériel sidenav composant. Est-ce que mon utilisation de fxLayout est correcte/acceptable? – user2094257

+0

Il ressemble pour la plupart. Est-ce que vous essayez de styler les éléments enfants du premier 'div'? Si c'est le cas, vous devriez utiliser 'fxLayoutAlign' à la place. En ce qui concerne vos problèmes de rendu sidenav, vous devez également afficher le code de votre composant de navigation. Vous pouvez implémenter le conteneur sidenav incorrectement, mais je ne peux pas le savoir sans voir le code. – ender

Répondre

0

En général, vous envelopper le contenu principal associé au sein du mat-sidenav-container. Les exemples material docs ont des exemples.

Dans votre cas, soit la totalité du code de la vue que vous avez posté, ou peut-être juste le code de votre tableau de bord, doit être contenu dans le mat-sidenav-container