【技術積累】Vue.js中的事件【一】

2023-07-16 06:00:22

Vue中的事件是什麼

在Vue.js中,事件是用於處理使用者互動的重要機制。Vue.js提供了一系列的事件處理方法和指令,使開發者能夠方便地處理使用者的各種操作。

1. 事件繫結:Vue.js通過v-on指令來繫結事件。可以在HTML標籤上使用v-on指令來監聽特定的事件,並在觸發事件時執行相應的方法。例如,可以使用v-on:click來監聽點選事件,v-on:input來監聽輸入事件等。

2. 事件修飾符:Vue.js提供了一些事件修飾符,用於對事件進行進一步的處理。例如,可以使用.stop修飾符來阻止事件冒泡,.prevent修飾符來阻止預設行為,.capture修飾符來將事件繫結到父元素上等。

3. 自定義事件:除了原生的DOM事件,Vue.js還支援自定義事件。可以使用Vue範例的$emit方法來觸發自定義事件,並使用v-on指令來監聽自定義事件。這樣可以在元件之間進行通訊,實現元件的解耦。

4. 事件引數:在事件處理方法中,可以通過$event引數來存取事件物件。事件物件包含了觸發事件的詳細資訊,例如滑鼠位置、鍵盤按鍵等。可以在事件處理方法中使用$event來獲取這些資訊。

5. 事件修飾符:Vue.js還提供了一些事件修飾符,用於對事件進行進一步的處理。例如,可以使用.stop修飾符來阻止事件冒泡,.prevent修飾符來阻止預設行為,.capture修飾符來將事件繫結到父元素上等。

6. 事件監聽器:除了使用v-on指令來繫結事件,Vue.js還提供了一種更靈活的方式來監聽事件,即使用事件監聽器。可以使用Vue範例的$on方法來監聽事件,並使用$off方法來取消監聽。這樣可以在任何地方監聽和取消監聽事件。

總之,Vue.js中的事件機制非常靈活和強大,可以滿足各種使用者互動的需求。開發者可以通過事件繫結、事件修飾符、自定義事件等方式來處理使用者的各種操作,並實現元件之間的通訊。

Vue.js中的事件修飾符

Vue.js中的事件修飾符用於在處理事件時提供額外的功能。以下是Vue.js中常用的事件修飾符:

1. .stop:阻止事件冒泡。使用該修飾符可以阻止事件向父元素傳播。

2. .prevent:阻止預設事件。使用該修飾符可以阻止元素的預設行為。

3. .capture:使用事件捕獲模式。預設情況下,事件是在冒泡階段處理的,使用該修飾符可以將事件處理移動到捕獲階段。

4. .self:只在事件目標自身觸發時觸發事件處理程式。如果事件發生在目標元素本身而不是子元素上,則觸發事件處理程式。

5. .once:只觸發一次事件處理程式。使用該修飾符可以確保事件只被處理一次。

6. .passive:指示事件處理程式不會呼叫preventDefault()。使用該修飾符可以提高捲動效能。

7. .native:監聽元件根元素的原生事件。使用該修飾符可以監聽元件根元素上的原生事件。

8. .keyCode:只在特定按鍵被按下時觸發事件處理程式。使用該修飾符可以指定只有在特定按鍵被按下時才觸發事件處理程式。

9. .key:只在特定按鍵被按下時觸發事件處理程式。與.keyCode類似,但可以使用鍵盤別名而不是鍵碼。

10. .stopPropagation:阻止事件繼續傳播。與.stop類似,但不會阻止其他事件處理程式被呼叫。

11. .preventDefault:阻止預設事件。與.prevent類似,但不會阻止事件傳播。

12. .sync:實現雙向資料繫結。使用該修飾符可以將父元件的屬性與子元件的屬性進行雙向繫結。

這些事件修飾符可以通過在事件後面新增.和修飾符名稱來使用,例如@click.stop表示阻止事件冒泡。

.stop

在Vue中,.stop是一個事件修飾符,用於停止事件的傳播。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.stop的案例,程式碼如下:

<template>
  <div @click="outerClick">
    <button @click.stop="innerClick">內部按鈕</button>
  </div>
</template>

<script>
export default {
  methods: {
    outerClick() {
      console.log("外部點選事件");
    },
    innerClick() {
      console.log("內部點選事件");
    }
  }
}
</script>

在上面的程式碼中,我們有一個包含按鈕的div元素。當點選按鈕時,會觸發內部按鈕的點選事件,並輸出"內部點選事件"。同時,由於使用了.stop修飾符,外部div元素的點選事件不會被觸發。

如果沒有使用.stop修飾符,當點選按鈕時,會先觸發內部按鈕的點選事件,然後再觸發外部div元素的點選事件,輸出"內部點選事件"和"外部點選事件"。

.stop修飾符的作用是停止事件的傳播,阻止事件從子元素向父元素傳播。它可以用於任何支援事件的元素上,通過在事件名後面加上.stop即可生效。

.prevent

在Vue中,.prevent是一個事件修飾符,用於阻止事件的預設行為。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.prevent的案例,程式碼如下:

<template>
  <div>
    <button @click.prevent="submitForm">提交</button>
  </div>
</template>

<script>
export default {
  methods: {
    submitForm() {
      // 執行表單提交邏輯
      console.log("表單已提交");
    }
  }
}
</script>

在上面的程式碼中,我們有一個按鈕,當點選按鈕時,會執行submitForm方法。使用.prevent修飾符可以阻止按鈕的預設行為,即阻止表單的提交。

當我們點選按鈕時,控制檯會輸出"表單已提交",但是頁面不會重新整理或跳轉,因為.prevent修飾符阻止了按鈕的預設行為。

.prevent修飾符的作用是阻止事件的預設行為,比如表單的提交、連結的跳轉等。它可以用於任何支援事件的元素上,通過在事件名後面加上.prevent即可生效。

.capture

在Vue中,.capture是一個事件修飾符,用於在事件處理期間使用事件捕獲模式。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.capture的案例,程式碼如下:

<template>
  <div @click.capture="outerClick">
    <button @click="innerClick">內部按鈕</button>
  </div>
</template>

<script>
export default {
  methods: {
    outerClick() {
      console.log("外部點選事件");
    },
    innerClick() {
      console.log("內部點選事件");
    }
  }
}
</script>

在上面的程式碼中,我們有一個包含按鈕的div元素。當點選按鈕時,會先觸發外部div元素的點選事件,輸出"外部點選事件",然後再觸發內部按鈕的點選事件,輸出"內部點選事件"。

如果沒有使用.capture修飾符,當點選按鈕時,會先觸發內部按鈕的點選事件,輸出"內部點選事件",然後再觸發外部div元素的點選事件,輸出"外部點選事件"。

.capture修飾符的作用是在事件處理期間使用事件捕獲模式,即從父元素向子元素傳播事件。它可以用於任何支援事件的元素上,通過在事件名前面加上.capture即可生效。

.self

在Vue中,.self是一個事件修飾符,用於限制事件只能在觸發事件的元素自身上觸發,而不是在其子元素上觸發。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.self的案例,程式碼如下:

<template>
  <div @click.self="outerClick">
    <button @click="innerClick">內部按鈕</button>
  </div>
</template>

<script>
export default {
  methods: {
    outerClick() {
      console.log("外部點選事件");
    },
    innerClick() {
      console.log("內部點選事件");
    }
  }
}
</script>

在上面的程式碼中,我們有一個包含按鈕的div元素。當點選按鈕時,不會觸發外部div元素的點選事件,只會觸發內部按鈕的點選事件,並輸出"內部點選事件"。

如果沒有使用.self修飾符,當點選按鈕時,會先觸發內部按鈕的點選事件,輸出"內部點選事件",然後再觸發外部div元素的點選事件,輸出"外部點選事件"。

.self修飾符的作用是限制事件只能在觸發事件的元素自身上觸發,而不是在其子元素上觸發。它可以用於任何支援事件的元素上,通過在事件名後面加上.self即可生效。

.once

在Vue中,.once是一個事件修飾符,用於指定事件只能觸發一次。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.once的案例,程式碼如下:

<template>
  <div>
    <button @click.once="clickHandler">點選一次</button>
  </div>
</template>

<script>
export default {
  methods: {
    clickHandler() {
      console.log("按鈕被點選了");
    }
  }
}
</script>

在上面的程式碼中,我們有一個按鈕,當點選按鈕時,會執行clickHandler方法,並輸出"按鈕被點選了"。使用.once修飾符可以確保該事件只能觸發一次。

當我們點選按鈕時,控制檯會輸出"按鈕被點選了",但是再次點選按鈕時,不會再觸發clickHandler方法。

.once修飾符的作用是指定事件只能觸發一次。它可以用於任何支援事件的元素上,通過在事件名後面加上.once即可生效。這對於需要確保事件只執行一次的場景非常有用。

.passive

在Vue中,.passive是一個事件修飾符,用於指定事件監聽器是被動的,即不會呼叫preventDefault()。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.passive的案例,程式碼如下:

<template>
  <div>
    <a href="#" @click.passive="clickHandler">點選連結</a>
  </div>
</template>

<script>
export default {
  methods: {
    clickHandler(event) {
      event.preventDefault();
      console.log("連結被點選了");
    }
  }
}
</script>

在上面的程式碼中,我們有一個連結,當點選連結時,會執行clickHandler方法,並輸出"連結被點選了"。使用.passive修飾符可以確保事件監聽器是被動的,不會呼叫preventDefault()。

在clickHandler方法中,我們呼叫了event.preventDefault()來阻止連結的預設行為,即不會跳轉到指定的URL。

.passive修飾符的作用是指定事件監聽器是被動的,不會呼叫preventDefault()。它可以用於任何支援事件的元素上,通過在事件名後面加上.passive即可生效。這對於需要在事件監聽器中阻止預設行為的場景非常有用。

.naive

在Vue中,.native是一個修飾符,用於監聽元件根元素的原生事件。它只能用於元件上,而不能用於普通的HTML元素。

下面是一個使用.native的案例,程式碼如下:

<template>
  <my-component @click.native="clickHandler"></my-component>
</template>

<script>
export default {
  methods: {
    clickHandler() {
      console.log("元件根元素被點選了");
    }
  }
}
</script>

在上面的程式碼中,我們有一個自定義元件my-component,並在該元件上使用了.native修飾符來監聽元件根元素的點選事件。當元件根元素被點選時,會執行clickHandler方法,並輸出"元件根元素被點選了"。

.native修飾符的作用是監聽元件根元素的原生事件。由於元件的根元素可能是一個自定義的HTML元素,而不是原生的HTML元素,所以預設情況下Vue會將元件上的事件繫結到元件根元素的自定義事件上。但是使用.native修飾符可以繫結到元件根元素的原生事件上。

需要注意的是,.native修飾符只能用於元件上,而不能用於普通的HTML元素。

.keyCode

在Vue中,.keyCode是一個修飾符,用於監聽鍵盤事件的特定按鍵。它可以用於任何支援鍵盤事件的元素上,比如輸入框、文字區域等。

下面是一個使用.keyCode的案例,程式碼如下:

<template>
  <div>
    <input type="text" @keydown.enter="enterKeyHandler">
  </div>
</template>

<script>
export default {
  methods: {
    enterKeyHandler(event) {
      console.log("按下了Enter鍵");
    }
  }
}
</script>

在上面的程式碼中,我們有一個輸入框,當按下Enter鍵時,會執行enterKeyHandler方法,並輸出"按下了Enter鍵"。使用.keycode修飾符可以監聽特定的按鍵。

在enterKeyHandler方法中,我們通過event物件來獲取按下的鍵的keyCode。在這個例子中,我們使用了.enter修飾符來監聽Enter鍵的按下事件。

.keyCode修飾符的作用是監聽鍵盤事件的特定按鍵。它可以用於任何支援鍵盤事件的元素上,通過在事件名後面加上.keyCode即可指定要監聽的按鍵。這對於需要根據按鍵來執行不同的操作的場景非常有用。

.key

在Vue中,.key是一個修飾符,用於監聽鍵盤事件的特定按鍵。它可以用於任何支援鍵盤事件的元素上,比如輸入框、文字區域等。

下面是一個使用.key的案例,程式碼如下:

<template>
  <div>
    <input type="text" @keydown="keyHandler">
  </div>
</template>

<script>
export default {
  methods: {
    keyHandler(event) {
      if (event.key === 'Enter') {
        console.log("按下了Enter鍵");
      } else if (event.key === 'Escape') {
        console.log("按下了Escape鍵");
      }
    }
  }
}
</script>

在上面的程式碼中,我們有一個輸入框,當按下鍵盤上的某個鍵時,會執行keyHandler方法,並根據按下的鍵來輸出相應的資訊。使用.key修飾符可以監聽特定的按鍵。

在keyHandler方法中,我們通過event物件來獲取按下的鍵的key屬性。在這個例子中,我們根據按下的鍵是Enter還是Escape來輸出不同的資訊。

.key修飾符的作用是監聽鍵盤事件的特定按鍵。它可以用於任何支援鍵盤事件的元素上,通過在事件名後面加上.key即可指定要監聽的按鍵。這對於需要根據按鍵來執行不同的操作的場景非常有用。

.stopPropagation

在Vue中,.stopPropagation是一個事件修飾符,用於阻止事件冒泡。它可以用於任何支援事件的元素上,比如按鈕、連結等。

下面是一個使用.stopPropagation的案例,程式碼如下:

<template>
  <div @click="outerClickHandler">
    <button @click.stop="innerClickHandler">點選按鈕</button>
  </div>
</template>

<script>
export default {
  methods: {
    outerClickHandler() {
      console.log("外層div被點選了");
    },
    innerClickHandler(event) {
      event.stopPropagation();
      console.log("內層按鈕被點選了");
    }
  }
}
</script>

在上面的程式碼中,我們有一個外層div和一個內層按鈕。當點選按鈕時,會執行innerClickHandler方法,並輸出"內層按鈕被點選了"。同時,由於使用了.stopPropagation修飾符,事件不會繼續向外層div冒泡,所以不會執行outerClickHandler方法。

在innerClickHandler方法中,我們呼叫了event.stopPropagation()來阻止事件冒泡。這意味著點選按鈕時,只會執行按鈕自身的事件處理邏輯,而不會觸發外層div的點選事件。

.stopPropagation修飾符的作用是阻止事件冒泡。它可以用於任何支援事件的元素上,通過在事件名後面加上.stopPropagation即可生效。這對於需要阻止事件冒泡的場景非常有用,可以避免事件在DOM樹中向上傳播。

.preventDefault

在Vue中,.preventDefault是一個事件修飾符,用於阻止事件的預設行為。它可以用於任何支援事件的元素上,比如表單提交、連結點選等。

下面是一個使用.preventDefault的案例,程式碼如下:

<template>
  <form @submit.prevent="submitHandler">
    <input type="text">
    <button type="submit">提交</button>
  </form>
</template>

<script>
export default {
  methods: {
    submitHandler() {
      console.log("表單提交");
    }
  }
}
</script>

在上面的程式碼中,我們有一個表單,當點選提交按鈕時,會執行submitHandler方法,並輸出"表單提交"。同時,由於使用了.preventDefault修飾符,事件不會觸發表單的預設提交行為,即頁面不會重新整理。

在submitHandler方法中,我們可以執行自定義的表單提交邏輯,而不受預設的表單提交行為影響。

.preventDefault修飾符的作用是阻止事件的預設行為。它可以用於任何支援事件的元素上,通過在事件名後面加上.preventDefault即可生效。這對於需要阻止事件的預設行為的場景非常有用,可以自定義事件的處理邏輯,而不受預設行為的干擾。

.sync

在Vue中,.sync是一個修飾符,用於實現父子元件之間的雙向資料繫結。它可以用於任何支援資料繫結的元素或元件上。

下面是一個使用.sync的案例,程式碼如下:

<template>
  <div>
    <input type="text" :value="message" @input="updateMessage">
    <button @click="resetMessage">重置</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  methods: {
    updateMessage(event) {
      this.message = event.target.value;
    },
    resetMessage() {
      this.message = '';
    }
  }
}
</script>

在上面的程式碼中,我們有一個輸入框和一個重置按鈕。輸入框的值通過:value繫結到message屬性上,同時監聽輸入事件(@input)來更新message的值。重置按鈕點選時,會將message的值重置為空字串。