Guest User

Untitled

a guest
Oct 19th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. constructor(private elementRef: ElementRef, private ngbPopover: NgbPopover,
  2. private ngZone: NgZone, private cd: ChangeDetectorRef, private renderer: Renderer2) {
  3. }
  4.  
  5. ngOnInit() {
  6. this.ngZone.runOutsideAngular(() => {
  7. this.listener = this.renderer.listen('document', 'click', (event) => {
  8. this.closePopoverOnClickOutside(event);
  9. });
  10. });
  11. }
  12.  
  13. ngOnDestroy() {
  14. this.listener();
  15. }
  16.  
  17. private closePopoverOnClickOutside(event: MouseEvent): void {
  18. // Popover is open
  19. if (this.ngbPopover && this.ngbPopover.isOpen()) {
  20. // Not clicked on self element
  21. if (!this.elementRef.nativeElement.contains(event.target)) {
  22. // Hacking typescript to access private member
  23. const popoverWindowRef: ComponentRef<NgbPopoverWindow> = (this.ngbPopover as any)._windowRef;
  24. // If clicked outside popover window
  25. if (!popoverWindowRef.location.nativeElement.contains(event.target)) {
  26. this.ngbPopover.close();
  27. this.cd.detectChanges(); // detect changes
  28. }
  29. }
  30. }
  31. }
Add Comment
Please, Sign In to add comment