UNPKG

pm-controls

Version:
69 lines (60 loc) 1.9 kB
import { Component, Input, OnInit, OnDestroy, ChangeDetectorRef, ChangeDetectionStrategy, ViewContainerRef } from '@angular/core'; @Component({ selector: 'pm-sidenav', //templateUrl: './app/controls/components/sidenav/sidenav.html', templateUrl: './sidenav.html', changeDetection: ChangeDetectionStrategy.OnPush // styles: [` // :host { // white-space: nowrap; // overflow: hidden; // text-overflow: ellipsis; // } // `], }) export class SidenavComponent implements OnInit, OnDestroy { constructor( public changeDetectorRef: ChangeDetectorRef, public viewContainerRef: ViewContainerRef) { this.el = viewContainerRef.element.nativeElement; this.changeDetectorRef.detach(); this.clickEvent = this.HandleClick.bind(this); } private el: Element; private clickEvent; ngOnInit() { this.changeDetectorRef.detectChanges(); let body = document.querySelector('body'); body.addEventListener('click', this.clickEvent, false); } private isSidenavOpen: boolean; @Input() get IsSidenavOpen() { return this.isSidenavOpen; } set IsSidenavOpen(value: boolean) { this.isSidenavOpen = value; this.changeDetectorRef.detectChanges(); } ToggleSidenav() { this.IsSidenavOpen = !this.IsSidenavOpen; } HandleClick(e) { if (!this.IsSidenavOpen || !e.target) { return; }; if (this.el !== e.target && !this.el.contains((<any>e.target))) { this.IsSidenavOpen = false; this.changeDetectorRef.detectChanges(); } } ngOnDestroy() { let body = document.querySelector('body'); body.removeEventListener('click', this.clickEvent, false); } }