2017-10-17 367 views
2

我最近开始第一次使用angular/flex并且不确定布局容器的嵌套。在下面的代码中,导航标记是一个角度材料sidenav,它在左侧打开,然后将其余内容推向右侧。在这一点上我注意到了(当我刚刚开始的时候,它不是这样的),当我打开/关闭它时,sidenav似乎迟了一点。它会在动画片段中间冻结几秒钟,然后完全打开/关闭。我在一行fxLayout容器中嵌套列和更多行fxLayout容器,并认为这可能是sidenav动画性能问题的原因?通过嵌套所有这些导致性能问题的容器,我是否会复杂化?嵌套fxLayout容器的好习惯?

我的代码:

<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

如果你正在做这个已经在导航标签我不能告诉,但我会建议使用材质sidenav组件[https://material.angular.io/components/sidenav/overview](https://material.angular.io/components/sidenav/overview) – ender

+0

我正在使用材质sidenav组件。我使用fxLayout看起来好吗/可以接受吗? – user2094257

+0

它看起来很像大部分。正在尝试设计第一个'div'的子元素吗?如果是这样,你应该使用'fxLayoutAlign'来代替。至于你的sidenav渲染问题,你也需要发布你的导航组件的代码。你可能会错误地实现sidenav-container,但是我不知道没有看到代码。 – ender

回答

0

通常您缠绕mat-sidenav-container内的相关主要内容。

material docs有一些例子。

在你的情况,要么所有的视图代码中你张贴,或者可能只是你的仪表板码,应包含内mat-sidenav-container