File

src/app/admin/admin.component.ts

Implements

OnInit OnDestroy

Metadata

selector app-admin
styleUrls ./admin.component.scss
templateUrl ./admin.component.html

Index

Properties
Methods

Constructor

constructor(mediaObserver: MediaObserver, config: ConfigService, translateService: TranslateService, translationService: TranslationService, navigationService: NavigationService)
Parameters :
Name Type Optional
mediaObserver MediaObserver No
config ConfigService No
translateService TranslateService No
translationService TranslationService No
navigationService NavigationService No

Methods

ngOnDestroy
ngOnDestroy()
Returns : void
ngOnInit
ngOnInit()
Returns : void
onActivate
onActivate(event, scrollContainer)
Parameters :
Name Optional Description
event No

事件

scrollContainer No

容器dom

Returns : void
onSettingsChange
onSettingsChange(settings)
Parameters :
Name Optional
settings No
Returns : void

Properties

customizerSidenavAlign
Type : string
Default value : 'end'
layoutMode
Type : boolean
Default value : false
navigationModel
Type : any
navigationModelChangeSubscription
Type : Subscription
onSettingsChanged
Type : Subscription
settings
Type : any
sidenavAlign
Type : string
Default value : 'start'
sidenavMode
Type : string
Default value : 'side'
sidenavOpen
Type : boolean
Default value : true
import { Component, OnInit, OnDestroy } from '@angular/core';
import { MediaObserver } from '@angular/flex-layout';
import { Subscription } from 'rxjs';
import { ConfigService } from '../core/config.service';
import { NavigationService } from '../component/navigation';

import { TranslateService } from '@ngx-translate/core';
import { TranslationService } from '../core/translation.service';
import { locale as english } from './i18n/en';
import { locale as chinese } from './i18n/zh';

@Component({
  selector: 'app-admin',
  templateUrl: './admin.component.html',
  styleUrls: ['./admin.component.scss']
})
export class AdminComponent implements OnInit, OnDestroy {
  settings: any;
  onSettingsChanged: Subscription;
  layoutMode: boolean = false;

  navigationModel: any;
  navigationModelChangeSubscription: Subscription;

  sidenavOpen: boolean = true;
  sidenavMode: string = 'side';
  sidenavAlign: string = 'start';
  customizerSidenavAlign: string = 'end';

  constructor(
    private mediaObserver: MediaObserver,
    private config: ConfigService,
    private translateService: TranslateService,
    private translationService: TranslationService,
    private navigationService: NavigationService
  ) {
    this.navigationModelChangeSubscription = this.navigationService.onNavigationModelChange.subscribe(
      navigation => {
        this.navigationModel = navigation;
      }
    );

    this.onSettingsChanged = this.config.onSettingsChanged.subscribe(
      settings => {
        this.settings = settings;

        if (this.settings.layout.mode === 'boxed') {
          this.layoutMode = true;
        } else {
          this.layoutMode = false;
        }

        if (this.settings.layout.navigation === 'left') {
          this.sidenavAlign = 'start';
          this.customizerSidenavAlign = 'end';
        } else if (this.settings.layout.navigation === 'right') {
          this.sidenavAlign = 'end';
          this.customizerSidenavAlign = 'start';
        } else {
          this.sidenavAlign = 'start';
          this.customizerSidenavAlign = 'end';
          this.sidenavOpen = false;
        }
      }
    );

    this.translateService.addLangs(['en', 'zh']);
    this.translateService.setDefaultLang('en');

    this.translationService.loadTranslations(english, chinese);
  }

  ngOnInit() {
    this.mediaObserver.media$.subscribe(change => {
      let isMobile = change.mqAlias === 'xs' || change.mqAlias === 'sm';
      this.sidenavMode = isMobile ? 'over' : 'side';
      this.sidenavOpen = !isMobile;
    });
  }

  ngOnDestroy() {
    this.navigationModelChangeSubscription.unsubscribe();
  }

  /**
   * @param event {Event} 事件
   * @param scrollContainer {Object} 容器dom
   */
  onActivate(event, scrollContainer) {
    scrollContainer.scrollTop = 0;
  }

  onSettingsChange(settings) {
    // this.config.setSettings(settings);
  }
}
<mat-sidenav-container [class.boxed]="layoutMode">

  <mat-sidenav class="customizer" [position]="customizerSidenavAlign" mode="over" #customizer>
    <stbui-customizer [settings]="settings" (settingsChange)="onSettingsChange($event)"></stbui-customizer>
  </mat-sidenav>

  <mat-sidenav class="sidenav" [position]="sidenavAlign" [mode]="sidenavMode" [opened]="sidenavOpen" #sidenav>
    <stbui-brand [ngClass]="settings.colorClasses.brand"></stbui-brand>
    <stbui-navigation [ngClass]="settings.colorClasses.navigation" [navigationModel]="navigationModel"></stbui-navigation>
  </mat-sidenav>

  <div class="sidenav-container" fxLayout="column">
    <stbui-header [customizer]="customizer" [sidenav]="sidenav" [ngClass]="settings.colorClasses.header" *ngIf="settings.layout.header=='below'"></stbui-header>

    <div class="main-container" #scrollContainer>
      <router-outlet (activate)="onActivate($event, scrollContainer)"></router-outlet>
    </div>

    <stbui-footer *ngIf="settings.layout.footer=='below'"></stbui-footer>
  </div>

</mat-sidenav-container>

./admin.component.scss

$height__main-toolbar: 64px;

:host {
  display: block;
  height: 100%;
  background: #2f3d4a;
  &:before,
  &:after {
    content: 'STBUI';
    position: absolute;
    top: 0;
    color: rgba(255, 255, 255, 0.12);
    overflow-wrap: break-word;
    text-align: center;
    transform: translate(0, 50%);
    padding: 0 20px;
    font-size: 62px;
    width: 46px;
  }
  &:after {
    right: 0;
  }
}

.sidenav {
  width: 250px;
  max-width: 250px;
  overflow-x: hidden;
  z-index: 4;
}

.sidenav-container {
  height: 100%;
}

.main-container {
  overflow-y: auto;
  overflow-x: hidden;
  height: calc(100% - #{$height__main-toolbar});
  position: relative;
}

.boxed {
  width: 1200px;
  height: 100%;
  display: block;
  margin: 0 auto;
  box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
    0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12);
}
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""