在我的应用程序中,单击一个元素时,我会显示一个包含附加信息的工具提示。这适用于列表中的所有元素。我希望能够在单击工具提示之外的任何内容时关闭扩展。
这个概念本质上是这个已回答问题所涵盖的内容,但如果元素有多个实例,我需要它来工作。我尝试将 ViewChildren 用于元素而不是 ViewChild,因为有多个元素,但这并没有达到我想要的效果。如果可能的话,我想避免使用任何尚不可用的软件包@angular/core
,rxjs
等等。请参阅下面的简化版本,这是我迄今为止没有成功的尝试。
HTML
<li *ngFor="let listItem of listItems;">
<p>
<span *ngIf="showTooltip" class="item-tooltip" #itemTooltip>
Tooltip with {{ listItem.detailed }}
<span (click)="toggleTooltip()">Close</span>
</span>
<span (click)="toggleTooltip()" #tooltipTrigger>{{ listItem.blurb }}</span>
</p>
</li>
TS
@ViewChildren('itemTooltip') itemTooltip: ElementRef;
@ViewChildren('tooltipTrigger') tooltipTrigger: ElementRef;
this.showTooltip = false;
constructor( private renderer: Renderer2) {
this.renderer.listen('window', 'click', (e: Event) => {
if (this.showTooltip && e.target !== this.itemTooltip.nativeElement) {
// never gets to here
console.log(‘click detected’);
this.toggleTooltip();
}
});
}
toggleTooltip() {
const tooltipStatus = this.showTooltip;
if (tooltipStatus = true) {
this.showTooltip = false;
} else if (tooltipStatus = false) {
this.showTooltip = true;
}
}