選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue 教程

Vue 首頁 Vue Intro Vue Directives Vue v-bind Vue v-if Vue v-show Vue v-for Vue Events Vue v-on Vue Methods Vue Event Modifiers Vue Forms Vue v-model Vue CSS Binding Vue Computed Properties Vue Watchers Vue Templates

Scaling Up

Vue 為什麼、如何及設定 Vue 第一個 SFC 頁面 Vue 元件 Vue Props Vue v-for 元件 Vue $emit() Vue 透傳屬性 Vue 作用域樣式 Vue 區域性元件 Vue 插槽 Vue v-slot Vue 作用域插槽 Vue 動態元件 Vue Teleport Vue HTTP 請求 Vue 模板引用 Vue 生命週期鉤子 Vue Provide/Inject Vue 路由 Vue 表單輸入 Vue 動畫 Vue v-for 動畫 Vue 構建 Vue Composition API

Vue Reference

Vue Built-in Attributes Vue Built-in Components Vue Built-in Elements Vue Component Instance Vue Directives Vue Instance Options Vue Lifecycle Hooks

Vue 示例

Vue Examples Vue Exercises Vue Quiz Vue Server Vue Certificate

Vue 偵聽器

偵聽器是一種方法,它會偵聽同名的資料屬性。

每當資料屬性值發生變化時,偵聽器就會執行。

如果某個資料屬性值需要採取行動,請使用偵聽器

偵聽器概念

偵聽器是我們將要學習的 Vue 例項中的第四個配置選項。我們已經看過的三個配置選項是 'data'、'methods' 和 'computed'。

與 'data'、'methods' 和 'computed' 一樣,偵聽器在 Vue 例項中也有一個保留名稱:'watch'。

語法

const app = Vue.createApp({
  data() {
    ...
  },
  手錶: {
    ...
  },
  computed: {
    ...
  },
  methods: {
    ...
  }
})

如頂部綠色區域所述,偵聽器監控同名的資料屬性。

我們從不呼叫偵聽器方法。它只在屬性值改變時自動呼叫。

新的屬性值始終作為輸入引數提供給偵聽器方法,舊值也是如此。

示例

一個 <input type="range"> 元素用於改變值 'rangeVal'。一個偵聽器用於阻止使用者選擇被認為是無效的 20 到 60 之間的值。

<input type="range" v-model="rangeVal">
<p>{{ rangeVal }}</p>
const app = Vue.createApp({
  data() {
    rangeVal: 70
  },
  watch: {
    rangeVal(val){
      if( val>20 && val<60) {
        if(val<40){
          this.rangeVal = 20;
        }
        else {
          this.rangeVal = 60;
        }
      }
    }
  }
})
自己動手試一試 »

帶有新舊值的偵聽器

除了新的屬性值,前一個屬性值也會自動作為輸入引數提供給偵聽器方法。

示例

我們設定了一個 <div> 元素的點選事件,用方法 'updatePos' 記錄滑鼠指標的 x 座標 'xPos'。偵聽器利用偵聽器方法的新舊輸入引數計算新 x 座標和前一個 x 座標之間的畫素差。

<div v-on:click="updatePos"></div>
<p>{{ xDiff }}</p>
const app = Vue.createApp({
  data() {
    xPos: 0,
    xDiff: 0
  },
  watch: {
    xPos(newVal,oldVal){
      this.xDiff = newVal-oldVal
    }
  },
  methods: {
    updatePos(evt) {
      this.xPos = evt.offsetX
    }
  }
})
自己動手試一試 »

我們還可以使用新舊值,在輸入從無效變為有效的那一刻向用戶提供反饋。

示例

一個 <input> 元素的值連線到一個偵聽器。如果該值包含 '@' 符號,則被認為是有效的電子郵件地址。使用者會收到一個反饋文字,告知輸入是否有效、無效,或者是否在上次按鍵後剛剛變為有效。

<input v-type="email" v-model="inpAddress">
<p v-bind:class="myClass">{{ feedbackText }}</p>
const app = Vue.createApp({
  data() {
    inpAddress: '',
    feedbackText: '',
    myClass: 'invalid'
  },
  watch: {
    inpAddress(newVal,oldVal) {
      if( !newVal.includes('@') ) {
        this.feedbackText = '電子郵件地址無效';
        this.myClass = 'invalid';
      }
      else if( !oldVal.includes('@') && newVal.includes('@') ) {
        this.feedbackText = '太棒了!你把它修正了!';
        this.myClass = 'valid';
      }
      else {
        this.feedbackText = '電子郵件地址有效 :)';
      }
    }
  }
})
自己動手試一試 »

偵聽器 vs. 方法

偵聽器和方法都寫成函式,但它們之間存在許多差異

  • 方法從 HTML 中呼叫。
  • 方法通常在事件發生時呼叫。
  • 方法自動接收事件物件作為輸入。
  • 我們還可以選擇將其他值作為輸入傳送給方法
  • 偵聽器只在被偵聽的資料屬性值改變時自動呼叫。
  • 偵聽器自動接收被偵聽屬性的新舊值。
  • 我們不能選擇將任何其他值作為輸入傳送給偵聽器

偵聽器 vs. 計算屬性

偵聽器和計算屬性都寫成函式。

當依賴項改變時,偵聽器和計算屬性都會自動呼叫,並且從不從 HTML 呼叫。

以下是計算屬性和偵聽器之間的一些區別

  • 偵聽器只依賴於一個屬性,即它們被設定為偵聽的屬性。
  • 計算屬性可以依賴於許多屬性。
  • 計算屬性像資料屬性一樣使用,只是它們是動態的。
  • 偵聽器不會從 HTML 中引用。

Vue 練習

透過練習來測試自己

練習

本練習中的偵聽器應該在每次 'rangeVal' 資料屬性改變時將 'count' 資料屬性增加一。

這個偵聽器必須叫什麼名字?

<script>
  const app = Vue.createApp({
    data() {
      return {
      	rangeVal: 70,
        count: 0
      }
    },
    watch: {
      () {
        this.count++
      }
    }
  })
 app.mount('#app')
</script>

開始練習



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援