在模式外部单击关闭Angular2模式
这是要单击外部以禁用选择的示例代码。在本例中,我可以取消选择,但只有在单击元素以激活侦听器之后。我想用这个例子在任何时候点击模态外部关闭模态。任何例子都将不胜感激在模式外部单击关闭Angular2模式,angular,onclick,Angular,Onclick,这是要单击外部以禁用选择的示例代码。在本例中,我可以取消选择,但只有在单击元素以激活侦听器之后。我想用这个例子在任何时候点击模态外部关闭模态。任何例子都将不胜感激 activeIndex = 0; subscription: any; init$: Subject<any> = new Subject(); stop$: Subject<any> = new Subject(); ngOnInit() { let click$ = Observable.fromE
activeIndex = 0;
subscription: any;
init$: Subject<any> = new Subject();
stop$: Subject<any> = new Subject();
ngOnInit() {
let click$ = Observable.fromEvent(document, 'click');
const clickOutside$ = this.init$.flatMap(() => {
return click$.takeUntil(this.stop$);
});
this.subscription = clickOutside$.subscribe(() => {
this.activeIndex = null;
console.log(1);
this.stop$.next();
});
}
onItemClicked(event, index: number) {
event.stopPropagation()
this.activeIndex = index;
this.init$.next()
}
ngOnDestroy() {
if(this.subscription) {
this.subscription.unsubscribe();
}
}
activeIndex=0;
认购:任何;
init$:Subject所以我举了一个例子,说明如何关闭我创建的自定义下拉列表,但我相信它也适用于此
因此,在组件内部:
openModal() { document.addEventListener('click', this.offClickHandler.bind(this)); }
offClickHandler(event:any) {
if (!event.target.closest(".select-options") && !event.target.closest(".select-input")) {
// do whatever you want here
// close the modal
// call document.removeEventListener
}
}
因此,这将查找按钮和div之外的单击,但对于您来说,我只需将.closest()设置为您希望看到关闭的模式。然后在if语句中关闭您的模式。因此,我有一个示例,说明了如何关闭我创建的自定义下拉列表,但我相信它也适用于此
因此,在组件内部:
openModal() { document.addEventListener('click', this.offClickHandler.bind(this)); }
offClickHandler(event:any) {
if (!event.target.closest(".select-options") && !event.target.closest(".select-input")) {
// do whatever you want here
// close the modal
// call document.removeEventListener
}
}
因此,这将查找按钮和div之外的单击,但对于您来说,我只需将.closest()设置为您希望看到关闭的模式。然后在if语句中关闭模态。嘿,Joshsiley,我试过了,但它不会停止收听单击事件。一旦模态关闭,我想停止收听事件。它确实有效,但并不完全如我所愿。谢谢你的帮助。明白了,另一个可行的方法是在打开模式时添加事件侦听器,然后在关闭弹出窗口时在if语句中关闭它。如何关闭它。我正在尝试document.removeEventListener('click',this.offClickHandler.bind(this));是的,您希望通过执行document.removeEventListener('click',this.offClickHandler.bind(this)),来删除它;我还编辑了答案,以便在单击按钮打开模式时仅添加事件侦听器,这样它就不会一直侦听,并且仅在模式打开时侦听Hey joshsisley我尝试了此操作,但它不会停止侦听单击事件。一旦模态关闭,我想停止收听事件。它确实有效,但并不完全如我所愿。谢谢你的帮助。明白了,另一个可行的方法是在打开模式时添加事件侦听器,然后在关闭弹出窗口时在if语句中关闭它。如何关闭它。我正在尝试document.removeEventListener('click',this.offClickHandler.bind(this));是的,您希望通过执行document.removeEventListener('click',this.offClickHandler.bind(this)),来删除它;我还编辑了答案,以便在单击按钮打开模式时仅添加事件侦听器,这样它就不总是侦听,而只在模式打开时侦听