日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Vue 事件處理函數(shù)的綁定示例詳解

瀏覽:237日期:2022-06-02 08:39:09
目錄
  • 正文
  • Vue 的事件處理綁定
  • 事件修飾符
  • 按鍵修飾符
  • Vue 為什么會(huì)在 HTML 中監(jiān)聽事件?

正文

在 JS 中「事件」是不需要綁定的,瀏覽器自帶了許多的事件,每個(gè)事件都可以去綁定「處理器(處理函數(shù))」。

事件 ==> 用戶行為 ==> 觸發(fā)瀏覽器的事件 ==> 執(zhí)行對應(yīng)的事件處理函數(shù)

我們通常通過addEventListenet方法去給事件綁定處理函數(shù):

document.addEventListenet("click", function () {
  // do...
}, flase);

需要注意的是addEventListenet只是「綁定」事件處理函數(shù)并不是「執(zhí)行」!處理函數(shù)只會(huì)在對應(yīng)事件觸發(fā)的時(shí)候才會(huì)進(jìn)行執(zhí)行。

某些情況下,我們需要把處理函數(shù)獨(dú)立出去,并且需要更改this的執(zhí)行,這是因?yàn)槭录幚砗瘮?shù)的this指向元素本身,也就意味著我們不能使用.call來更改this的指向,因?yàn)?code>.call方法會(huì)立即執(zhí)行函數(shù)!

// 這會(huì)導(dǎo)致 test 立即執(zhí)行!
document.addEventListenet("click", test.call(this), flase);
// 可以利用 .bind 方法放心的去指向 this,因?yàn)?bind 不會(huì)立即執(zhí)行
document.addEventListenet("click", test.bind(this), flase);

Vue 的事件處理綁定

來到VueVue提供了v-on指令讓開發(fā)者對元素綁定事件處理函數(shù),例如:

<div v-on:click="methodName"></div>
<!-- 或者使用 @click 對 v-on 進(jìn)行簡寫 -->
<div @click="handler"></div>

v-on的值可以是JS表達(dá)式:

<button @click="count += 1">Add</button>

不推薦這樣做,應(yīng)該把邏輯放到methods里面處理。

v-on的值還可以是一個(gè)方法事件處理器:

 <button @click="onClickAdd">Add</button>

@click接受一個(gè)方法名或?qū)δ硞€(gè)方法的調(diào)用。

當(dāng)通過方法名去綁定事件處理函數(shù)的時(shí)候,我們可以給方法傳遞參數(shù):

<div>
  <h1>{{ count }}</h1>
  <button @click="onClickAdd(2)">Add</button>
  <button @click="onClickMinus(2, $event)">Minus</button>
</div>

以上代碼,button在綁定了onClickAddonClickMinus處理函數(shù)后不會(huì)立即執(zhí)行,而是當(dāng)事件觸發(fā)后才執(zhí)行,這會(huì)開頭我們說的addEventListenet是一樣的!

onClickAddonClickMinus的括號是為了方便我們傳遞想要參數(shù)方便在methdos里進(jìn)行處理。

這里有一個(gè)特殊的參數(shù)$event,該屬性是Vue內(nèi)部封裝的一個(gè)屬性,表示觸發(fā)事件的事件對象。

const app = {
  template: `<button @click="onClickMinus(2, $event)">Minus</button>`,
  data(){
    return {
      count: 0
    }
  }
  methods:{
    onClickMinus(num, e){
      console.log(e);
      this.count += num;
    }
  }
}

v-on指令還可以同時(shí)綁定多個(gè)事件處理函數(shù),例如:

<div>
  <h1>{{ count }}</h1>
  <button @click="onClickAdd(),setLog()">Add</button>
  <button @click="onClickMinus">Minus</button>
</div>

只要在兩個(gè)方法的中間用,分隔就可以同時(shí)綁定兩個(gè)事件處理函數(shù)啦。

事件修飾符

我們在處理事件時(shí)可能會(huì)調(diào)用event.preventDefault()event.stopPropagation()是很常見的。Vue提供了一套「修飾符」來幫助我們完成這些事件,這么做的目的是讓開發(fā)者更專注于數(shù)據(jù)邏輯而不用去處理DOM事件的細(xì)節(jié)。

修飾符是用 . 表示的指令后綴,包含以下這些:

  • .stop:阻止事件冒泡。
  • .prevent:阻止事件的默認(rèn)行為。
  • .self:當(dāng)event.target是元素本身時(shí)才會(huì)觸發(fā)事件處理器 。
  • .capture:采用事件捕獲。
  • .once:事件調(diào)用一次后,自動(dòng)移除監(jiān)聽器。
  • .passive:修飾符一般用于觸摸事件的監(jiān)聽器,可以用來改善移動(dòng)端設(shè)備的滾屏性能。

?? 注意

不能同時(shí)使用.passive.prevent,因?yàn)?code>.passive已經(jīng)向?yàn)g覽器表明了你不想阻止事件的默認(rèn)行為。
如果你這么做了,則.prevent會(huì)被忽略,并且瀏覽器會(huì)拋出警告。

<!-- 單擊事件將停止傳遞 -->
<a @click.stop="doThis"></a>

<!-- 提交事件將不再重新加載頁面 -->
<form @submit.prevent="onSubmit"></form>

<!-- 修飾語可以使用鏈?zhǔn)綍鴮?-->
<a @click.stop.prevent="doThat"></a>

<!-- 也可以只有修飾符 -->
<form @submit.prevent></form>

<!-- 僅當(dāng) event.target 是元素本身時(shí)才會(huì)觸發(fā)事件處理器 -->
<!-- 例如:事件處理器不來自子元素 -->
<div @click.self="doThat">...</div>

使用修飾符時(shí)需要注意調(diào)用順序,因?yàn)橄嚓P(guān)代碼是以相同的順序生成的。因此使用@click.prevent.self會(huì)阻止元素及其子元素的所有點(diǎn)擊事件的默認(rèn)行為,而@click.self.prevent則只會(huì)阻止對元素本身的點(diǎn)擊事件的默認(rèn)行為。

按鍵修飾符

我們通過可能還需要通過event.keycode來判斷用戶觸發(fā)的按鍵,Vue允許在v-on@監(jiān)聽按鍵事件時(shí)添加按鍵修飾符,例如:

<!-- 僅在 `key` 為 `Enter` 時(shí)調(diào)用 `submit` -->
<input @keyup.enter="submit" />

你可以直接使用KeyboardEvent.key暴露的按鍵名稱作為修飾符,但需要轉(zhuǎn)為 kebab-case 形式。

<input @keyup.page-down="onPageDown" />

Vue為一些常用的按鍵提供了別名:

  • .enter
  • .tab
  • .delete (捕獲“Delete”和“Backspace”兩個(gè)按鍵)
  • .esc
  • .space
  • .up
  • .down
  • .left
  • .right

你可以使用以下系統(tǒng)按鍵修飾符來觸發(fā)鼠標(biāo)或鍵盤事件監(jiān)聽器,只有當(dāng)按鍵被按下時(shí)才會(huì)觸發(fā)。

  • .ctrl
  • .alt
  • .shift
  • .meta

例如:

<!-- Alt + Enter -->
<input @keyup.alt.enter="clear" />

<!-- Ctrl + 點(diǎn)擊 -->
<div @click.ctrl="doSomething">Do something</div>

請注意,系統(tǒng)按鍵修飾符和常規(guī)按鍵不同。與keyup事件一起使用時(shí),該按鍵必須在事件發(fā)出時(shí)處于按下狀態(tài)。
換句話說,keyup.ctrl只會(huì)在你仍然按住ctrl但松開了另一個(gè)鍵時(shí)被觸發(fā)。若你單獨(dú)松開ctrl鍵將不會(huì)觸發(fā)。

.exact修飾符允許控制觸發(fā)一個(gè)事件所需的確定組合的系統(tǒng)按鍵修飾符。

<!-- 當(dāng)按下 Ctrl 時(shí),即使同時(shí)按下 Alt 或 Shift 也會(huì)觸發(fā) -->
<button @click.ctrl="onClick">A</button>

<!-- 僅當(dāng)按下 Ctrl 且未按任何其他鍵時(shí)才會(huì)觸發(fā) -->
<button @click.ctrl.exact="onCtrlClick">A</button>

<!-- 僅當(dāng)沒有按下任何系統(tǒng)按鍵時(shí)觸發(fā) -->
<button @click.exact="onClick">A</button>

你可以使用以下鼠標(biāo)按鍵修飾符來觸發(fā)鼠標(biāo)事件監(jiān)聽器:

  • .left
  • .right
  • .middle

這些修飾符將處理程序限定為由特定鼠標(biāo)按鍵觸發(fā)的事件。

Vue 為什么會(huì)在 HTML 中監(jiān)聽事件?

我們發(fā)現(xiàn)Vue是在template中直接綁定事件的,這違背了「關(guān)注點(diǎn)分離」的概念。但是不用擔(dān)心,Vue把事件處理方法和表達(dá)式都嚴(yán)格的綁定到當(dāng)前視圖的ViewModel上,他不會(huì)導(dǎo)致任何維護(hù)上的困難。
當(dāng)我們使用v-on在視圖上綁定事件處理,有幾個(gè)好處:

1、掃一眼HTML模版便能輕松定位JavaScript里面對應(yīng)的方法。

2、無須在JavaScript里手動(dòng)綁定事件,你的ViewModel代碼可以是非純粹的邏輯,和DOM完全解藕,更容易測試。

3、當(dāng)一個(gè)ViewModel銷毀的時(shí)候,所有的事件處理器都會(huì)自動(dòng)被刪除。你需要擔(dān)心如何清理它們。

以上就是Vue 事件處理函數(shù)的綁定示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue 事件處理函數(shù)綁定的資料請關(guān)注其它相關(guān)文章!

標(biāo)簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
麻豆久久久久久| 精品福利久久久| 精品视频在线一区二区在线| 久久亚洲视频| 欧美特黄一区| 欧美午夜精彩| 日韩精品电影| 国产日产精品一区二区三区四区的观看方式 | 日韩高清不卡| 97人人精品| 国产精品免费不| 欧美精品福利| 国产亚洲久久| 日本久久一区| 国产日韩1区| 国产精品草草| 精品精品久久| 国产高清亚洲| 久久精品系列| 日韩在线不卡| 亚洲精品网址| 国产精品外国| 亚洲精品伊人| 日本少妇精品亚洲第一区| 欧美日韩亚洲一区二区三区在线| 五月天综合网站| 综合视频一区| 黑人精品一区| 日韩国产91| 久久高清精品| 国产精品大片| 日韩在线a电影| 欧美激情99| 制服诱惑一区二区| 精品久久影院| 免费日本视频一区| 国产a亚洲精品| 中文字幕av一区二区三区人| 精品久久美女| 天堂va欧美ⅴa亚洲va一国产| 精品久久久中文字幕| 免费人成在线不卡| 欧美日韩视频网站| 日韩av电影一区| 婷婷综合社区| 91一区二区| 欧美日韩xxxx| 日韩视频一区二区三区在线播放免费观看| 国产精品一区二区三区av麻| 亚洲激情社区| 蜜桃av在线播放| 麻豆国产欧美日韩综合精品二区| 国产精品美女久久久| 福利视频一区| 国产欧美精品久久| 亚洲精品日韩久久| 欧美精品一卡| 99免费精品| 韩国久久久久久| 国产丝袜一区| 亚洲精品亚洲人成在线观看| 欧美日韩日本国产亚洲在线| 久久精品国产久精国产爱| 亚洲精品第一| 免费精品视频在线| 伊人精品在线| 欧美日韩在线二区| 日韩av福利| 国产不卡精品在线| 欧美国产日本| 国产亚洲欧美日韩在线观看一区二区| 久久福利毛片| 人人精品人人爱| 男女精品网站| 日韩视频免费| 午夜久久免费观看| 亚洲欧美日韩高清在线| 激情不卡一区二区三区视频在线| 国产日韩中文在线中文字幕 | 久久av免费| 久久精品超碰| 日本成人在线网站| 日韩欧美久久| 亚洲精品字幕| 日韩午夜视频在线| 日韩av中文在线观看| 亚洲精品在线二区| 亚欧成人精品| 日韩av网站在线观看| 快she精品国产999| 免费国产自线拍一欧美视频| 免费不卡中文字幕在线| 三级小说欧洲区亚洲区| 国产videos久久| 成人在线免费观看网站| 久久久精品区| 麻豆精品在线播放| 精品丝袜久久| 极品av在线| 激情综合自拍| 香蕉视频成人在线观看| 亚洲免费资源| 国产欧美啪啪| 国产成人久久| 日韩电影二区| 亚洲激情另类| 日韩精品一区二区三区免费视频 | 国产一区91| 日韩三级精品| 麻豆91在线播放| 日本韩国欧美超级黄在线观看| 激情久久婷婷| 日韩一区二区三区高清在线观看 | 国产精品igao视频网网址不卡日韩 | 激情久久一区二区| 日韩欧美字幕| 好吊日精品视频| 亚久久调教视频| 国产一区二区三区黄网站| 久久亚洲在线| 日韩在线观看中文字幕| 鲁大师精品99久久久| 香蕉视频亚洲一级| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美一级久久| 91一区二区| 中文字幕免费精品| 国产伊人久久| 国产农村妇女精品一二区| 久久国产人妖系列| 蜜臀久久精品| 香蕉久久一区| 肉色欧美久久久久久久免费看| 久热综合在线亚洲精品| 久久久91麻豆精品国产一区| 999久久久91| 日本久久一区| 在线一区视频观看| 少妇精品在线| 桃色一区二区| 亚洲三级网站| 国产一区2区在线观看| 一区久久精品| 精品亚洲a∨| 免费观看久久久4p| 精品日韩一区| 视频一区二区三区中文字幕| 蜜桃久久久久| 久久亚洲图片| 日韩欧美少妇| 麻豆国产精品视频| 首页亚洲欧美制服丝腿| 久久精品国产99国产精品| 亚洲黄色影院| 国产一区二区亚洲| 亚洲高清不卡| 久久精品国产999大香线蕉| 亚洲综合另类| 日韩欧美一区二区三区免费看| 日韩亚洲精品在线观看| 欧美亚洲国产精品久久| 国产精品地址| 亚洲精品动态| 红桃视频国产一区| 福利在线免费视频| 国产精品天天看天天狠| 亚洲一区区二区| 久久天堂精品| 国产aa精品| 国产另类在线| 另类av一区二区| 婷婷亚洲五月| 久久天堂成人| 日韩电影二区| 麻豆91小视频| 日韩毛片一区| 亚洲天堂av资源在线观看| 日韩精品免费一区二区在线观看| 久久99蜜桃| 国产精品最新自拍| 青草av.久久免费一区| 亚洲性视频在线| 一区二区三区四区精品视频| 亚洲婷婷在线| 蜜桃国内精品久久久久软件9| 久久久久久久久成人| 国产精品久久久久久久久久妞妞 | 免费欧美一区| 日韩一区二区在线免费| 精品国产亚洲一区二区三区在线| 青青国产精品| 日本精品国产| 91成人在线网站| 日韩国产在线观看| 天堂俺去俺来也www久久婷婷| 蜜桃视频在线观看一区二区| 午夜在线精品偷拍| 亚洲精品综合| 亚洲人成在线影院| 日韩高清三区|