Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- constructor(private elementRef: ElementRef, private ngbPopover: NgbPopover,
- private ngZone: NgZone, private cd: ChangeDetectorRef, private renderer: Renderer2) {
- }
- ngOnInit() {
- this.ngZone.runOutsideAngular(() => {
- this.listener = this.renderer.listen('document', 'click', (event) => {
- this.closePopoverOnClickOutside(event);
- });
- });
- }
- ngOnDestroy() {
- this.listener();
- }
- private closePopoverOnClickOutside(event: MouseEvent): void {
- // Popover is open
- if (this.ngbPopover && this.ngbPopover.isOpen()) {
- // Not clicked on self element
- if (!this.elementRef.nativeElement.contains(event.target)) {
- // Hacking typescript to access private member
- const popoverWindowRef: ComponentRef<NgbPopoverWindow> = (this.ngbPopover as any)._windowRef;
- // If clicked outside popover window
- if (!popoverWindowRef.location.nativeElement.contains(event.target)) {
- this.ngbPopover.close();
- this.cd.detectChanges(); // detect changes
- }
- }
- }
- }
Add Comment
Please, Sign In to add comment