第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何關(guān)閉外部點(diǎn)擊的下拉菜單?

如何關(guān)閉外部點(diǎn)擊的下拉菜單?

明月笑刀無情 2019-12-12 13:47:31
當(dāng)用戶單擊下拉菜單之外的任何地方時(shí),我想關(guān)閉我的登錄菜單下拉菜單,我想使用Angular2和Angular2“方法”來完成此操作...我已經(jīng)實(shí)現(xiàn)了一個(gè)解決方案,但是我對(duì)此確實(shí)沒有信心。我認(rèn)為必須有一種最簡(jiǎn)單的方法來獲得相同的結(jié)果,因此,如果您有任何想法...讓我們討論一下:)!這是我的實(shí)現(xiàn):下拉組件:這是我的下拉菜單的組件:每次將此組件設(shè)置為可見時(shí),(例如:當(dāng)用戶單擊按鈕以顯示它時(shí))它都會(huì)訂閱一個(gè)存儲(chǔ)在SubjectsService中的“全局” rxjs主題userMenu。每次隱藏時(shí),它都會(huì)退訂該主題。該組件模板內(nèi)任何位置的每次點(diǎn)擊都會(huì)觸發(fā)onClick()方法,該方法只會(huì)停止將事件冒泡到頂部(和應(yīng)用程序組件)這是代碼export class UserMenuComponent {    _isVisible: boolean = false;    _subscriptions: Subscription<any> = null;    constructor(public subjects: SubjectsService) {    }    onClick(event) {        event.stopPropagation();    }    set isVisible(v) {        if( v ){            setTimeout( () => {this._subscriptions =  this.subjects.userMenu.subscribe((e) => {                       this.isVisible = false;                       })            }, 0);        } else {            this._subscriptions.unsubscribe();        }        this._isVisible = v;    }    get isVisible() {        return this._isVisible;    }}應(yīng)用程序組件:另一方面,有應(yīng)用程序組件(它是下拉組件的父級(jí)):該組件捕獲每個(gè)click事件并在相同的rxjs Subject(userMenu)上發(fā)出這是代碼:export class AppComponent {    constructor( public subjects: SubjectsService) {        document.addEventListener('click', () => this.onClick());    }    onClick( ) {        this.subjects.userMenu.next({});    }}什么困擾我:我對(duì)于讓全局主題充當(dāng)這些組件之間的連接器的想法感到非常不滿意。該setTimeout的:這是必要的,因?yàn)檫@里是,如果在此按鈕,用戶點(diǎn)擊,顯示的下拉什么,否則會(huì)發(fā)生:用戶單擊按鈕(不是下拉菜單組件的一部分)以顯示下拉菜單。顯示該下拉菜單,它立即訂閱userMenu主題。點(diǎn)擊事件冒泡到應(yīng)用程序組件并被捕獲應(yīng)用程序組件在userMenu主題上發(fā)出事件下拉組件在userMenu上捕獲此操作,并隱藏下拉菜單。最后,從不顯示下拉列表。這個(gè)設(shè)置的超時(shí)將訂閱延遲到當(dāng)前JavaScript代碼回合的末尾,從而解決了問題,但是我認(rèn)為這是一種非常優(yōu)雅的方式。如果您知道更清潔,更好,更智能,更快或更強(qiáng)大的解決方案,請(qǐng)告訴我:)!
查看完整描述

3 回答

?
料青山看我應(yīng)如是

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊

您可以使用(document:click)事件:


@Component({

  host: {

    '(document:click)': 'onClick($event)',

  },

})

class SomeComponent() {

  constructor(private _eref: ElementRef) { }


  onClick(event) {

   if (!this._eref.nativeElement.contains(event.target)) // or some similar check

     doSomething();

  }

}

另一種方法是創(chuàng)建自定義事件作為指令。



    查看完整回答
    反對(duì) 回復(fù) 2019-12-12
    • 3 回答
    • 0 關(guān)注
    • 433 瀏覽
    慕課專欄
    更多

    添加回答

    舉報(bào)

    0/150
    提交
    取消
    微信客服

    購(gòu)課補(bǔ)貼
    聯(lián)系客服咨詢優(yōu)惠詳情

    幫助反饋 APP下載

    慕課網(wǎng)APP
    您的移動(dòng)學(xué)習(xí)伙伴

    公眾號(hào)

    掃描二維碼
    關(guān)注慕課網(wǎng)微信公眾號(hào)