как кодировать материал, подобный sidenav. angular .io сделал - PullRequest
0 голосов
/ 24 апреля 2020

Я также задавал этот вопрос в Github @ angular / components Проблемы, на нем есть скриншот.

Что вы пытаетесь сделать?

Я пытаюсь написать демонстрацию скелета Sidenav, точно так же как официальный документ https://material.angular.io/ скелет навигации (меню в левой части и тело контента в правой части с обзором \ api \ examples tabs).

И я новичок в Angular, я не могу понять, как кодировать этот скелет Sidenav, и я не могу найти, где находится соответствующий исходный код этого скелета после того, как я клонировал этот репозиторий.

Если кто-нибудь может мне помочь, я буду очень признателен. 101

Какие действия по устранению неполадок вы предприняли?

Я уже прочитал Документ Sidenav и до сих пор не понимаю.

Потому что согласно этот документ мне нужно кодировать Sidenav следующим образом, но в официальном скелете Sidenav его класс называется docs-component-viewer-nav-content ng-tns-c139-5, а не mat-drawer-inner-container ng-tns-c36-0:

<mat-sidenav-container class="example-container" *ngIf="shouldRun">
  <mat-sidenav mode="side" opened>Sidenav content</mat-sidenav>
  <mat-sidenav-content>Main content</mat-sidenav-content>
</mat-sidenav-container>

Воспроизведение

Как и выше, я использую тег mat-sidenav-container, но не знаю, как реализовать стиль Sidenav на официальном сайте один за другим.

Environment

  • Angular: ~ 9.1.0
  • CDK / Материал: ^ 9.2.0
  • Браузер (ы): Chrome
  • Операционная система (например, Windows, macOS, Ubuntu): macOS

Ответы [ 3 ]

0 голосов
/ 24 апреля 2020

Из документов вы можете использовать схемы для создания полной навигации и настройки поведения и аспекта по своему усмотрению.

ng generate @angular/material:table <component-name>

Приведенная выше команда создаст полностью адаптивную навигацию компонента, и он импортирует необходимые модули.

Если вы хотите сделать это вручную, вы можете увидеть пример ниже (в основном то, что сгенерирует команда выше):

HTML template:

<mat-sidenav-container class="sidenav-container">
  <mat-sidenav
    #drawer
    class="sidenav"
    fixedInViewport
    [attr.role]="(isHandset$ | async) ? 'dialog' : 'navigation'"
    [mode]="(isHandset$ | async) ? 'over' : 'side'"
    [opened]="(isHandset$ | async) === false"
  >
    <mat-toolbar>Menu</mat-toolbar>
    <mat-nav-list>
      <a mat-list-item href="#">Link 1</a>
      <a mat-list-item href="#">Link 2</a>
      <a mat-list-item href="#">Link 3</a>
    </mat-nav-list>
  </mat-sidenav>
  <mat-sidenav-content>
    <mat-toolbar color="primary">
      <button
        type="button"
        aria-label="Toggle sidenav"
        mat-icon-button
        (click)="drawer.toggle()"
        *ngIf="isHandset$ | async"
      >
        <mat-icon aria-label="Side nav toggle icon">menu</mat-icon>
      </button>
      <span>blog</span>
    </mat-toolbar>
    <!-- Add Content Here -->
    <ng-content></ng-content>
  </mat-sidenav-content>
</mat-sidenav-container>

Файл TypeScript

import { Component } from '@angular/core';
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
import { Observable } from 'rxjs';
import { map, shareReplay } from 'rxjs/operators';

@Component({
  selector: 'it-nav-example',
  templateUrl: './nav-example.component.html',
  styleUrls: ['./nav-example.component.scss']
})
export class NavExampleComponent {

  isHandset$: Observable<boolean> = this.breakpointObserver.observe(Breakpoints.Handset)
    .pipe(
      map(result => result.matches),
      shareReplay()
    );

  constructor(private breakpointObserver: BreakpointObserver) {}

}

CSS file

.sidenav-container {
  height: 100%;
}

.sidenav {
  width: 200px;
}

.sidenav .mat-toolbar {
  background: inherit;
}

.mat-toolbar.mat-primary {
  position: sticky;
  top: 0;
  z-index: 1;
}

Независимо от того, как вы решите создать навигацию, убедитесь, что ваши маршруты находятся внутри навигации компонент в вашем root компоненте так:

app.component. html

<app-nav-example>
  <router-outlet></router-outlet>
</app-nav-example>
0 голосов
/ 03 мая 2020

Я недавно создал видеоурок на YouTube, в котором пошагово рассматривается этот вопрос. Проверьте это здесь:

https://www.youtube.com/watch?v=XwNwtTeml3c

Спасибо, Ливиу

0 голосов
/ 24 апреля 2020

Вот стек пример - https://stackblitz.com/edit/angular-material-drawer

Структура angular sidenav меню

<button mat-icon-button (click)="sidenav.toggle()">

mat- ящик-контейнер и мат-ящик важны

<mat-drawer-container fullscreen>
    <mat-drawer #sidenav mode="side" opened="true" role="navigation" style="background-color:#3c3f4e;">
      <ng-container>
          <mat-label>Test</mat-label>
      </ng-container>
    </mat-drawer>
    <mat-drawer-content role="region">
      <router-outlet></router-outlet>
    </mat-drawer-content>
  </mat-drawer-container>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...