, md-sidenav-layout transform: translate3d CSS.
:
. https://developer.mozilla.org/en-US/docs/Web/CSS/transform
Material 2 , translate3d sidenav, : https://github.com/angular/material2/issues/998
. FAB , ( md-sidenav-layout), FAB Observable .
<md-sidenav-container>
<md-sidenav #sidenav mode="side" class="app-sidenav">
<md-nav-list>
<a md-list-item routerLink="/">
<span md-line>Home</span>
</a>
</md-nav-list>
</md-sidenav>
<md-toolbar color="primary">
<button md-icon-button (click)="sidenav.toggle()">
<md-icon class="icon-40">menu</md-icon>
</button>
<span>Angular Material 2 Sidenav with FAB</span>
</md-toolbar>
<router-outlet></router-outlet>
</md-sidenav-container>
<router-outlet name="fab"></router-outlet>
FAB
export class FabService {
private actionSource = new Subject<string>();
public actionStream = this.actionSource.asObservable();
public broadcastAction(action: string) {
this.actionSource.next(action);
}
}
FAB
@Component({
template: '<button md-fab class="fab" (click)="actionHandler()"><md-icon>add</md-icon></button>',
styles: [`
button.fab {
position: fixed;
bottom: 12px;
right: 12px;
}
`]
})
export class FabComponent {
constructor(private fabService: FabService) { }
actionHandler() {
this.fabService.broadcastAction('click');
}
}
export class MainComponent implements OnInit, OnDestroy {
private subscription: Subscription;
constructor(private fabService: FabService) { }
ngOnInit(): void {
this.subscription = this.fabService.actionStream.subscribe(event => this.events.push(event));
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
const routes: Routes = [
{ path: '', children: [
{ path: '', component: MainComponent},
{ path: '', component: FabComponent, outlet: 'fab' }
]}
: http://plnkr.co/edit/GLFWfdy2JSXNKefhuNLA?p=preview