Vue中事件修飾符

一、語法

xxx代表修飾符

@click.xxx = 'fn'

二、修飾符匯總

  • stop :阻止事件冒泡;
  • once : 事件只可被執行一次;
  • native :保證自定義組件上的事件可以被執行;
  • prevent : 阻止默認事件的發生;
  • keyCode : 指定鍵位觸發事件;
  • self :只有綁定事件本身被執行某個操作時,事件才會被觸發;
  • passive : 不去阻止默認事件發生;
  • capture : 事件捕獲;
  • sync :子組件更新父組件的傳遞值;
  • left /middle /right : 指定鼠標鍵位觸發事件;

三、用法

3.1、修飾符 —— .stop

阻止事件冒泡

  <view>
            <view @click='fatherClick' class="padding-tb-lgx bg-gradual-blue">
                <button @click.stop='childrenClick'>點擊</button>
            </view>
        </view>

        methods: {
            fatherClick(){
                console.log(1);
            },
            childrenClick(){
                console.log(2);
            }
        },

不添加.stop修飾符的情況下點擊button按鈕時先后觸發事件打印出2 1,即事件冒泡給了父級,父級事件被一同觸發。添加.stop修飾符后可避免此情況發生。

3.2、 修飾符 —— .once

顧名思義,事件只可被執行一次。

<view>
            <view @click.self='fatherClick' class="padding-tb-lgx bg-gradual-blue">
                <button @click.once='childrenClick'>點擊</button>
            </view>
        </view>

        methods: {
            fatherClick(){
                console.log(1);
            },
            childrenClick(){
                console.log(2);
            }
        },

點擊加了.once修飾符的button按鈕,事件打印只執行一次,此后`多次點擊 事件不生效。

3.3、 修飾符 —— .native

保證自定義組件上的事件可以被執行

<view class="padding-tb-lgx bg-gradual-blue">
  <ybh-tags @click.native='childrenClick' :config='configTags'></ybh-tags>
</view>

methods: {
  childrenClick(){
    console.log(2);
  }
},

一般在組件定義事件無法被直接執行的,大多是通過組件內部的emit廣播出處理后的數據,父級通過組件中emit廣播的參數名寫成方法形式接收,但是通過給事件添加.native后可以直接生效該事件。

3.4、修飾符 —— .prevent

阻止默認事件的發生,比如a標簽的跳轉button的提交等。

<a href="#" @click.prevent="clickEvent(1)">點我</a>

methods: {
        clickEvent(num) {
            不加 prevent 點擊a標簽 先跳轉然后輸出 1
            加了 prevent 點擊a標簽 不會跳轉只會輸出 1
            console.log(num)
        }
    }

3.5、修飾符 —— .keyCode

指定鍵盤鍵位觸發對應事件,一般配合事件@keyup使用,如指定按ctrl事件觸發事件 @keyup.ctrl ;

<input type="number" @keyup.ctrl="children">

也可以有多種搭配,需自行嘗試。

Vue提供的keyCode:

//普通鍵
.enter 
.tab
.delete //(捕獲“刪除”和“退格”鍵)
.space
.esc
.up
.down
.left
.right
//系統修飾鍵
.ctrl
.alt
.meta
.shift

如果如果想直接調用 @keyup.f2 = "add" ,需要自定義全局按鍵

解決方案如下:鍵盤對應的鍵碼鏈接 (https://blog.csdn.net/weixin_42218847/article/details/81411291)
//自定義全局按鍵修飾符
Vue.config.keyCodes.F2 = 113
<!-- 自定義按鍵修飾  按  f2 添加 -->
<input type="text" name="" id="" value="" class="form-control" v-model="name" @keyup.113="add"/> 

3.6、修飾符 —— .self

只有綁定事件本身被執行某個操作時,事件才會被觸發。有點繞,看示例:

 <view>
            <view @click.self='fatherClick' class="padding-tb-lgx bg-gradual-blue">
                <button @click='childrenClick'>點擊</button>
            </view>
        </view>

        methods: {
            fatherClick(){
                console.log(1);
            },
            childrenClick(){
                console.log(2);
            }
        },

如果不在父級標簽的點擊事件上添加.self修飾符,點擊button按鈕時,會先后觸發事件打印出 2 1,形成了事件冒泡,此時對父級事件添加.self后,由于觸發的對象并不是父級標簽,所以父級標簽上的事件不會被觸發,點擊button后只會打印出 2。

3.7、修飾符 ——.passive

不在阻止默認事件的發生;提問:本來就默認執行了,還要加這玩意干嘛嘞???

每個事件執行時,系統都會看一看這個執行的事件有沒有被什么 .prevent(阻止默認) 的家伙阻止掉,沒有最好,有那就沒辦法,老老實實聽它的。正常情況事件執行次數少或連續執行時間不會很短時是沒什么大問題,但是如果是屏幕滾動事件,需要在短時間內連續觸發很多次時,每次執行都會問一下這一次有沒有被阻止啊啥的,嚴重影響了性能,就可能會照成滑動卡頓、不流暢的現象。

怎么辦嘞?這時候就在事件上加上.passive,直接跟這個事件臉上貼上“ 我沒有阻止的傾向 ”,不用再問我有沒有被阻止啦。

<div @scroll.passive="onScroll">...</div>

3.8、修飾符 ——.capture

用于事件捕獲,與冒泡相反


     <view>
            <view @click.capture='fatherClick' class="padding-tb-lgx bg-gradual-blue">
                <button @click='childrenClick'>點擊</button>
            </view>
        </view>

        methods: {
            fatherClick(){
                console.log(1);
            },
            childrenClick(){
                console.log(2);
            }
        },

不加.capture修飾時,點擊button會前后觸發事件冒泡打印出 2 1,而添加了.capture修飾后 事件打印變為 1 2

3.9、修飾符 ——.sync

父組件傳遞給子組件值后,若子組件需要更新父組件傳遞的這個值時在父組件傳遞值的屬性上使用此修飾符。(vue組件之間傳值時單向數據流,一般不支持子組件直接更改父組件值)

//父組件 :
<ybh-tags :isShow.sync='show'></ybh-tags>
data(){
  return {
    show : true,
  }
}
//子組件:
this.$emit('update:isShow',false);

以上代碼實現內容為:子組件在父組件傳遞的show為true時顯示,子組件關閉(子組件將父組件傳遞的show值改為false)后子組件隱藏。但是由于控制子組件顯隱的show值是父組件傳遞過來的,在子組件中直接更改show值無法改變父級中的show值,所以導致了父組件在打開一次子組件后,子組件關閉將無法在此顯示子組件內容。因為父級在第一次將show值改為true之后,并沒有因為子組件將show值改為false而變成false,導致了父組件的show值一直保持在了true的狀態。

3.10、 left /middle /right

指定鼠標鍵位觸發對應事件

 <button @click.middle="clickEvent(1)"  @click.left="clickEvent(2)"  @click.right="clickEvent(3)">點我</button>

  methods: {
        點擊中鍵輸出1
        點擊左鍵輸出2
        點擊右鍵輸出3
        clickEvent(num) {
            console.log(num)
        }
    }
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,333評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,491評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,263評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,946評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,708評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,409評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,939評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,774評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,641評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,872評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,650評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容