簡體   English   中英

如何使用Vue指令防止鏈接或按鈕中的點擊事件

[英]How to prevent click event in link or button using Vue directive

嗨,我正在使用 vue 指令,如果元素是<a><button>標記,我正在嘗試阻止單擊事件。 所以我的問題是,這可以使用 vue 指令嗎?

html

<a 
    @click.stop.prevent="displayModal()"
    v-noclick="test">
    I'm a link
</a>

Vue 指令

Vue.directive('noclick', {
    bind( elem, binding, vnode ) {

        let user = {'name': 'John Doe'}

        if( user ) {
            let hasAccess = false

            if( !hasAccess ) {
                if( elem.tagName === 'A' ) {
                    elem.addEventListener( 'click', ( event ) => {
                        //this should prevent the element on click event
                        //but not working

                        event.stopPropagation()
                        event.preventDefault()
                        event.stopImmediatePropagation()
                        return false
                    })
                    return true
                }
            }
        }
    }
}

Vue 在v-noclick之前首先注冊@click事件,您可以在該元素上添加第二個單擊事件偵聽器。 當點擊<a> ,將首先執行displayModal()函數,然后將執行v-noclick指令中的偵聽器。 如果聽眾以相反的順序注冊,那么它可能會起作用。

盡管如此,看起來您嘗試做的事情不應該在自定義指令中完成。 相反,您可以在單擊處理程序本身中執行相同的邏輯:

<a @click="onClick">Foo</a>
onClick() {
  if (whatever) {
    this.displayModal()
  }
}

我找不到一種 vue 方法來做到這一點。 但是使用 js 你可以使用這樣的條件序列

<a @click="cond && onClick"></a>

在這種情況下,如果 cond 等於 true 然后 onClick 將調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM