src/app/admin/admin.component.ts
| selector | app-admin |
| styleUrls | ./admin.component.scss |
| templateUrl | ./admin.component.html |
Properties |
Methods |
constructor(mediaObserver: MediaObserver, config: ConfigService, translateService: TranslateService, translationService: TranslationService, navigationService: NavigationService)
|
||||||||||||||||||
|
Defined in src/app/admin/admin.component.ts:28
|
||||||||||||||||||
|
Parameters :
|
| ngOnDestroy |
ngOnDestroy()
|
|
Defined in src/app/admin/admin.component.ts:81
|
|
Returns :
void
|
| ngOnInit |
ngOnInit()
|
|
Defined in src/app/admin/admin.component.ts:73
|
|
Returns :
void
|
| onActivate | |||||||||
onActivate(event, scrollContainer)
|
|||||||||
|
Defined in src/app/admin/admin.component.ts:89
|
|||||||||
|
Parameters :
Returns :
void
|
| onSettingsChange | ||||
onSettingsChange(settings)
|
||||
|
Defined in src/app/admin/admin.component.ts:93
|
||||
|
Parameters :
Returns :
void
|
| customizerSidenavAlign |
Type : string
|
Default value : 'end'
|
|
Defined in src/app/admin/admin.component.ts:28
|
| layoutMode |
Type : boolean
|
Default value : false
|
|
Defined in src/app/admin/admin.component.ts:20
|
| navigationModel |
Type : any
|
|
Defined in src/app/admin/admin.component.ts:22
|
| navigationModelChangeSubscription |
Type : Subscription
|
|
Defined in src/app/admin/admin.component.ts:23
|
| onSettingsChanged |
Type : Subscription
|
|
Defined in src/app/admin/admin.component.ts:19
|
| settings |
Type : any
|
|
Defined in src/app/admin/admin.component.ts:18
|
| sidenavAlign |
Type : string
|
Default value : 'start'
|
|
Defined in src/app/admin/admin.component.ts:27
|
| sidenavMode |
Type : string
|
Default value : 'side'
|
|
Defined in src/app/admin/admin.component.ts:26
|
| sidenavOpen |
Type : boolean
|
Default value : true
|
|
Defined in src/app/admin/admin.component.ts:25
|
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);
}