4 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊
您的疊加 div 應(yīng)該在頂部關(guān)閉。試試這個(gè)
<div id="overlay" (click)="closeThis($event)" *ngIf="open" class="overlay"></div>
<div class="bg-modal" id="bg-modal">
<div class="modal-content" id="openModal">
<div class="col-12">
<div class="close" id="close" (click)="closeThis($event)">+</div>
<p class="title">Modal</p>
<hr>
</div>
<div class="col-12">
<div class="contents">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequ.</p>
</div>
</div>
<div class="confirm" id="confirm" (click)="confirmModal()">OK</div>
</div>
</div>
.overlay {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
background: rgba(0,0,0,0.5);
}
.bg-modal{
position: fixed;
z-index: 10
}

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
在你的模態(tài)周圍有一個(gè)疊加,比如:-
<button (click)="openModalBtn()" id="bt">
{{buttonName}}
</button>
<div id="overlay" (click)="closeThis($event)" *ngIf="open" class="overlay">
<div class="bg-modal" id="bg-modal">
<div class="modal-content" id="openModal">
<div class="col-12">
<div class="close" id="close" (click)="closeThis($event)">+</div>
<p class="title">Modal</p>
<hr>
</div>
<div class="col-12">
<div class="contents">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequ.</p>
</div>
</div>
<div class="confirm" id="confirm" (click)="confirmModal()">OK</div>
</div>
</div>
</div>
和 css :-
.overlay {
position: fixed;
width: 100vw;
height: 100vh;
left: 0;
top: 0;
background: transparent;
}
TS :-
public closeThis(event) {
if(event.target.id==='close' || event.target.id ==='overlay') {
this.open= false;
}
}

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超6個(gè)贊
偵聽(tīng)窗口單擊事件并獲取對(duì)模式的引用。在窗口中,單擊檢查模式是否包含目標(biāo)元素。如果它不包含,請(qǐng)關(guān)閉模態(tài)。Viewchild
@ViewChild("<modal-referece>",{static:false}) modalRef:ElementRef;
@HostListener('window:click', ['$event.target'])
onClick(elem) {
let element: HTMLElement = elem as HTMLElement;
if(!(this.modalRef.nativeElement as HTMLElement).contains(element)){
//close modal
}
}

TA貢獻(xiàn)2041條經(jīng)驗(yàn) 獲得超4個(gè)贊
嘗試另一種方式來(lái)偵聽(tīng)點(diǎn)擊事件:
import { Component, OnInit, ElementRef, HostListener, AfterViewInit } from '@angular/core';
@Component({
selector: 'app-modal',
templateUrl: './modal.component.html',
styleUrls: ['./modal.component.css']
})
export class ModalComponent implements OnInit, AfterViewInit {
public open: boolean = false;
public buttonName: any = 'Open';
modalElement: any;
constructor(private elementRef: ElementRef) { }
@HostListener('document:click', ['$event'])
clickout(event) {
if (!this.elementRef.nativeElement.contains(event.target)) {
this.closeAll();
}
}
ngAfterViewInit() {
this.modalElement = this.elementRef.nativeElement.querySelector('#bg-modal');
}
ngOnInit() {
}
openModalBtn() {
this.open = !this.open;
}
public closeThis(): void {
this.open = false;
}
public confirmModal(): void {
this.open = false;
}
public closeAll(): void {
this.open = false;
}
}
添加回答
舉報(bào)