Gui Blog

v-on:Vue 事件觸發器

Gui·/2 min · VueJavaScript

v-on 能夠透過 Event(如點擊事件)來觸發某個方法。

v-on 寫法與縮寫

一般寫法(以點擊事件為例)

<button v-on:click="帶入方法(或其參數) or 直接撰寫">按鈕</button>

縮寫(以點擊事件為例)

<button @click="帶入方法(或其參數) or 直接撰寫">按鈕</button>

事件修飾符:prevent

  • HTML 中的 a 或是 form 表單內的 post 會分別在點擊鏈結跟 submit 後跳轉鏈結
  • 若無須跳轉鏈結,可在 v-on 後加入 .prevent,可移除其事件
  • 當然也可以增加事件,可參考官方文件:https://cn.vuejs.org/v2/api/#v-on

a 鏈結範例

<a href="https://www.google.com" @click.prevent="方法變數">鏈結</a>
  • 加入 .prevent 前,執行完方法後就會跳轉鏈結
  • 加入 .prevent 後,執行完方法不會跳轉鏈結

表單 submit 範例

<form action="https://www.google.com/" @submit.prevent="方法變數">
    <input type="text">
    <input type="submit">
</form>
  • 加入 .prevent 前,點擊 submit 會執行完方法後並跳轉鏈結
  • 加入 .prevent 後,點擊 submit 執行完方法但不會跳轉鏈結

範例程式碼

HTML

<div id="app">
    <button @click="counter += 1">Add 1</button>
    <p>The button above has been clicked {{ counter }} times.</p>
    <hr>
    <button @click="say('hi')">say hi</button>
    <button @click="say('what')">say what</button>
    <hr>
    <a href="https://www.google.com/" @click.prevent="clickfu">有 prevent 的狀況下</a><br>
    <a href="https://www.google.com/" @click="clickfu">沒有 prevent 的狀況下</a>
    <hr>
    <form action="https://www.google.com/" @submit.prevent="submitFu">
        <h3>有 prevent</h3>
        <input type="text">
        <input type="submit">
    </form>
    <form action="https://www.google.com/" @submit="submitFu">
        <h3>沒有 prevent</h3>
        <input type="text">
        <input type="submit">
    </form>
    <hr>
    <p>
        <label for="enter">針對 input 按下 Enter 會觸發按鍵精靈</label>
        <input id="enter" type="text" @keyup.enter="onEnter">
    </p>
    <p>
        <label for="a">針對 input 按下 Enter 會觸發按鍵精靈</label>
        <input id="a" type="text" @keyup.a="onEnter">
    </p>
    <p>
        <label for="b">針對 input 按下 Enter 會觸發按鍵精靈</label>
        <input id="b" type="text" @keyup.b="onEnter">
    </p>
    <p>
        <label for="c">針對 input 按下 Enter 會觸發按鍵精靈</label>
        <input id="c" type="text" @keyup.c="onEnter">
    </p>
</div>

JavaScript

const app = {
    data () {
        return {
            counter: 0,
        }
    },
    methods: {
        say (message) {
            alert(message);
        },
        clickfu () {
            alert('prevent');
        },
        submitFu () {
            alert('表單傳遞');
        },
        onEnter () {
            alert('按鍵精靈');
        },
    },
}

Vue.createApp(app).mount('#app');

#Vue