# Vue學習#12 Vue指令集 - 事件觸發 ###### tags: `Vue 直播班 - 2022 春季班` `Vue` ## v-on 能夠將 HTML 標籤綁定 Vue 元件的 methods 來執行事件 , 效果跟 JS 的 addEventListener 一樣,也可以直接操作元件內的資料 用 v-on 指令監聽網頁上的事件(如同純 JS 的 DOM 事件),並在觸發時運行一些 Vue 的方法。 ### 語法 ```=Vue // v-on:事件類型="方法" <button type="button" v-on:click="method" ``` **縮寫** ```=Vue @事件類型="方法" ``` ### 範例 -- 直接操作元件內資料 #### HTML ```=Vue <div id="example-1"> <button v-on:click="counter += 1">Add 1</button> <p>The button above has been clicked {{ counter }} times.</p> </div> ``` #### JS ```=JavaScript const app = { data() { return { counter: 0 } } } Vue.createApp(app).mount('#example-1') ``` 利用 v-on 將 data 內的資料 counter 進行修改 , 每按一次按鈕就將 counter +1 ### 範例 -- 運作元件內的method,將事件綁定在標籤上 #### HTML ```=Vue <div id="example-3"> <button v-on:click="say('hi')">Say hi</button> <button v-on:click="say('what')">Say what</button> </div> ``` #### JS ```=JavaScript const app = { methods: { say: function (message) { alert(message) } } } Vue.createApp(app).mount('#example-3') ``` 透過兩個不同的按鈕,執行兩個不同的 method ( say(message) ) , 並放入不同的參數顯示不同的 alert ## 事件修飾符 說明:HTML 中本身有預設的事件,如 `a` 的預設事件則是跳制特定連結,而事件修飾符可以增加或移除事件 ### prevent <font color=#B1187C>**效果:**</font> 移除預設的 HTML 事件 <font color=#B1187C >**重點:**</font> 1. `v-on:click.prevent`,加在 click (或是其他事件名稱) 的後方 2. <font color='red'> **移除預設事件後會執行觸發器內的事件**</font>,如果放在 a 連結,即可移除 a 連結的預設事件(不會開啟新頁) ### stop <font color=#B1187C>**效果:**</font> 就像 event.stopPropagation() , 用來阻擋事件冒泡 <font color=#B1187C >**重點:**</font> 1. `v-on:click.stop`,加在 click (或是其他事件名稱) 的後方 2. 加入 stop 後,事件就不會向外層傳遞 ### once <font color=#B1187C>**效果:**</font> 讓指定事件只會觸發一次,執行後就解除事件監聽 <font color=#B1187C >**重點:**</font> 1. `v-on:click.once`,加在 click (或是其他事件名稱) 的後方 ## 更多指令參考 [官方Vue的v-on更多事件參考](https://cn.vuejs.org/v2/api/#v-on) ## 按鍵修飾符 除了移除事件外,也可以在觸發器上增加額外的事件監聽,如 Enter、Key(按下特定案鍵) 等等 <font color=#B1187C >**重點:**</font> 1. 針對 input 標籤額外增加按鍵修飾符,按下特定按鍵時則會運行 methods 中的方法 2. methods 的方法只有特定按鍵才能觸發,如:enter、keyup.a … ### 按鍵修飾符範例 [按鍵修飾符](https://codepen.io/binlandz123/pen/MWrxgoQ?editors=1010)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.