中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue基礎中的偵聽器是什么

發布時間:2021-12-07 15:59:15 來源:億速云 閱讀:175 作者:柒染 欄目:開發技術

Vue基礎中的偵聽器是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

vue中什么是偵聽器

  • 開發中我們在data返回的對象中定義了數據,這個數據可以通過插值語法等方式綁定到templat中。

  • 當數據變化的時候,template里綁定的數據會自動進行更新來顯示最新的數據。但是這種變化是在template中自動偵聽data的值來進行變換的

  • 在某些情況下,我們希望在代碼邏輯中監聽某個數據的變化,這個時候就需要用到偵聽器watch了

官方定義:Vue 通過 watch 選項提供了一個更通用的方法,來響應數據的變化。當需要在數據變化時執行異步或開銷較大的操作時,這個方式是最有用的。

一個對象,鍵是要偵聽的響應式 property——包含了 data 或 computed property,而值是對應的回調函數。值也可以是方法名,或者包含額外選項的對象。組件實例將會在實例化時調用 $watch(),參閱 $watch,以了解更多關于 deep、immediate 和 flush 選項的信息

偵聽器的用法

選項:watch

類型:{ [key: string]: string | Function | Object | Array}

偵聽器watch的配置選項:

默認情況下,watch只是在偵聽數據的引用變化,對于數據內部屬性的變化是不會做出響應的:

這個時候我們可以使用一個選項deep進行更深層的偵聽;另外一個屬性,是希望一開始的就會立即執行一次:這個時候我們使用immediate選項;這個時候無論后面數據是否有變化,偵聽的函數都會有限執行一次;

data的內容:

data() {
    return {
        info: {
            name: 'cgj'
        }
    }
}
watch: {
    info: {
        handler(newValue, oldValue) {
            console.log(newValue, oldValue)    
        }
        deep: true,
        immediate: true,
    }
}

另外一個是Vue3文檔中沒有提到的,但是Vue2文檔中有提到的是偵聽對象的屬性:

'info.name': function(newValue, oldValue) {
    console.log(newValue, oldValue)
}

還有另外一種方式就是使用 $watch 的API:

具體$watch可以查看官方的API查看(用的方式比較少):實例方法 | Vue.js

const app = createApp({
  data() {
    return {
      a: 1,
      b: 2,
      c: {
        d: 4
      },
      e: 5,
      f: 6
    }
  },
  watch: {
    // 偵聽頂級 property
    a(val, oldVal) {
      console.log(`new: ${val}, old: ${oldVal}`)
    },
    // 字符串方法名
    b: 'someMethod',
    // 該回調會在任何被偵聽的對象的 property 改變時被調用,不論其被嵌套多深
    c: {
      handler(val, oldVal) {
        console.log('c changed')
      },
      deep: true
    },
    // 偵聽單個嵌套 property
    'c.d': function (val, oldVal) {
      // do something
    },
    // 該回調將會在偵聽開始之后被立即調用
    e: {
      handler(val, oldVal) {
        console.log('e changed')
      },
      immediate: true
    },
    // 你可以傳入回調數組,它們會被逐一調用
    f: [
      'handle1',
      function handle2(val, oldVal) {
        console.log('handle2 triggered')
      },
      {
        handler: function handle3(val, oldVal) {
          console.log('handle3 triggered')
        }
        /* ... */
      }
    ]
  },
  methods: {
    someMethod() {
      console.log('b changed')
    },
    handle1() {
      console.log('handle 1 triggered')
    }
  }
})
const vm = app.mount('#app')
vm.a = 3 // => new: 3, old: 1

vue偵聽器-watch

目標: 可以偵聽data/computed屬性值改變

語法:

watch: {
    "被偵聽的屬性名" (newVal, oldVal){
    }
}

例子代碼:

<template>
  <div>
    <input type="text" v-model="name">
  </div>
</template>
<script>
export default {
  data(){
    return {
      name: ""
    }
  },
  // 目標: 偵聽到name值的改變
  /*
  語法:
    watch: {
      變量名 (newVal, oldVal){
        // 變量名對應值改變這里自動觸發
      }
    }
  */
  watch: {
    // newVal: 當前最新值
    // oldVal: 上一刻值
    name(newVal, oldVal){
      console.log(newVal, oldVal);
    }
  }
}
</script>
<style>
</style>

小結: 想要偵聽一個屬性變化, 可使用偵聽屬性watch

vue偵聽器-深度偵聽和立即執行

目標: 可以偵聽data/computed屬性值改變

語法:

watch: {
    "被偵聽的屬性名" (newVal, oldVal){
    }
}

例子代碼:

<template>
  <div>
    <input type="text" v-model="user.name">
    <input type="text" v-model="user.age">
  </div>
</template>
<script>
export default {
  data(){
    return {
      user: {
        name: "",
        age: 0
      }
    }
  },
  // 目標: 偵聽對象
  /*
  語法:
    watch: {
      變量名 (newVal, oldVal){
        // 變量名對應值改變這里自動觸發
      },
      變量名: {
        handler(newVal, oldVal){
        },
        deep: true, // 深度偵聽(對象里面層的值改變)
        immediate: true // 立即偵聽(網頁打開handler執行一次)
      }
    }
  */
  watch: {
    user: {
      handler(newVal, oldVal){
        // user里的對象
        console.log(newVal, oldVal);
      },
      deep: true,
      immediate: true
    }
  }
}
</script>
<style>
</style>

小結: immediate立即偵聽, deep深度偵聽, handler固定方法觸發

看完上述內容,你們掌握Vue基礎中的偵聽器是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

陇南市| 工布江达县| 义乌市| 库车县| 托里县| 文安县| 南投县| 昭苏县| 平乐县| 庆云县| 福州市| 土默特右旗| 内乡县| 吕梁市| 长治县| 拉萨市| 安丘市| 无为县| 华蓥市| 和林格尔县| 花垣县| 镇安县| 普兰店市| 信宜市| 青海省| 定襄县| 永川市| 洪洞县| 辽阳县| 兰溪市| 宁陵县| 旌德县| 岳西县| 枞阳县| 西藏| 拉萨市| 阿坝县| 竹山县| 五常市| 乌拉特后旗| 萨嘎县|