iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Modern Web

前端我又來了 - 30天 Vue學好學滿系列 第 7

[30天 Vue學好學滿 DAY7] 監聽器(Watch)

  • 分享至 

  • xImage
  •  

Watch 監聽器

具比較傳(old & new)
無回傳值(return)
監聽變數發生異動-> 觸發
監聽變數無實際異動(true -> true),不進行觸發

Key

監聽目標

Value

callback 函數

實做

HTML

<button @click="addValue">add</button>
<h3>{{ count }}</h3>
<h3>{{ showValue }}</h3>

定義變數

count: 0,
equalsFive: false,
showValue: "",

定義方法: 按下按鈕 count + 1

addValue: function () {
    this.count += 1;
},

監聽器

watch: {
    // 監聽count 
    count: function (val) {
      console.log(val); // 預設 new value
      this.equalsFive = (val == 5);
    },
    // equalsFive
    equalsFive: function (newVal, oldValue) {
      console.log('old value : ' + oldValue);
      console.log('new value : ' + newVal);
      this.showValue = "It's Five Now";
    },
},

執行測試:初始畫面,不進行任何觸發
https://ithelp.ithome.com.tw/upload/images/20210906/201295360h5J18o3gB.png

按4次按鈕:count觸發4次,equalsFive未進行觸發
https://ithelp.ithome.com.tw/upload/images/20210906/201295363iZ60BAlCR.png

按第5次按鈕:count & equalsFive 進行觸發
https://ithelp.ithome.com.tw/upload/images/20210906/20129536ctXWz595nZ.png


物件形式 handler、deep

handler:欲進行的處理
deep:深度觀察,call by reference

調整 count HTML

<h3>{{ obj.count }}</h3>

調整變數 count

obj:{
    count: 0,
},

監聽器

obj: function (val) {
    console.log(val)
      this.equalsFive = (val.count == 5);
},

進行測試:無監聽效果
https://ithelp.ithome.com.tw/upload/images/20210906/2012953646Hbxjk0Fu.png

將監聽器加上handler並設定deep

obj: {
    handler: function (val) {
        console.log(val);
        this.equalsFive = val.count == 5;
    },
    deep: true

進行測試:觸發成功
https://ithelp.ithome.com.tw/upload/images/20210906/20129536LJyFu6XD7q.png

immediate

初始化即觸發handler

調整監聽器

obj: {
    handler: function (val) {
        console.log('immediate!');
        this.equalsFive = val.count == 5;
    },
    deep: true,
    immediate: true
},

進行測試:初始即觸發
https://ithelp.ithome.com.tw/upload/images/20210906/201295360LVTr40smx.png

大致跟昨天的computed做比較

computed 不論來源是否有實際異動皆觸發
watch 監聽值實際異動則觸發

computed 依賴值 -> 一個結果 (無法異動無關變數)
watch 監聽值 -> 程序 (可對其他參數、方法進行操作)

computed 將結果暫存

watch 可取舊值


有錯誤請不吝指教!

參考資料
https://cn.vuejs.org/v2/guide/computed.html
https://medium.com/unalai
https://cythilya.github.io/2017/04/15/vue-watch/
https://ithelp.ithome.com.tw/articles/10204091
https://medium.com/@jedy05097952/vue-%E9%82%84%E6%98%AF%E4%B8%8D%E6%87%82-computed-83a200571e1b

感謝各路大神 /images/emoticon/emoticon31.gif


上一篇
[30天 Vue學好學滿 DAY6] 計算屬性(Computed)
下一篇
[30天 Vue學好學滿 DAY8] v-bind
系列文
前端我又來了 - 30天 Vue學好學滿30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言