大佬教程收集整理的这篇文章主要介绍了在Angular 2中使用shadow DOM时,Node.contains()是否有效?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的父组件如下所示:
<div class="body"> <div class="item" *ngFor="let item of sortedItems;"> <cv-checkBox></cv-checkBox> <cv-svg-icon></cv-svg-icon> </div> <div class="drop-zones" *ngFor="let zone of sortedItems.length + 1 | numberToArrayPipe;> <div class="drop-zone"></div> </div> </div>
如您所见,我的父组件中有两个Angular组件:cv-checkBox和cv-svg-icon.我已经向我的父组件添加了一个如下所示的指令:
<cv-layer-manager cvClickOutside (clickOutside)="toggleLayerManager()"></cv-layer-manager>
我在哪里检查被点击的节点是否包含在父节点中,如下所示:
@HostListener('document:click',['$event']) public onClick(event: MouseEvent) { const clickedInside = this._elementRef.nativeElement.contains(event.target); if (!clickedInside) { this.clickOutside.emit(); } }
如果我单击普通的HTML组件,一切都按预期工作,但是当我点击一个Angular组件时.包含不检查Angular组件内部是否正确?
@ViewChild('element') elementRef: ElementRef; private allowClose = true;
然后我添加了另一个HostListener,它只侦听当前组件的事件.
@HostListener('click',['$event']) clickInside(event: any) { this.allowClose = false; }
然后我修改了clickOutside方法以仅在allowClose为true时处理close,然后再次将allowClose设置为true.
@HostListener('document:click',['$event']) clickOutside(event: any) { if (!this.elementRef.nativeElement.contains(event.target) && this.allowClose) { this.handleClose(); } this.allowClose = true; }
而已!
以上是大佬教程为你收集整理的在Angular 2中使用shadow DOM时,Node.contains()是否有效?全部内容,希望文章能够帮你解决在Angular 2中使用shadow DOM时,Node.contains()是否有效?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。