vue組件中使用watch響應數據


在vue中,使用watch來響應數據的變化。watch的用法大致有三種。下面代碼是watch的一種簡單的用法:

普通用法:

<template>
    //視圖
 <input v-model="username" v-on="changeVal" placeholder="用戶名"><span>dsfsf</span></input>
</template>
<script>
    export default {
        data() {
            return {
               username:'';
            }
        },
        methods: {
         changeVal(e){
              this.loginForm.username=e;
          }
        },
        watch: {
            username(newValue){
               console.log(newValue)//監聽username的變化,這種寫法,默認第一次不執行該函數
            }
        }
    }
</script>

靈活用法:immediate和handler結合使用

解析:

這樣使用watch時有一個特點,就是當值第一次綁定的時候,不會執行監聽函數,只有值發生改變才會執行。如果我們需要在最初綁定值的時候也執行函數,則就需要用到immediate屬性。

比如當父組件向子組件動態傳值時,子組件props首次獲取到父組件傳來的默認值時,也需要執行函數,此時就需要將immediate設為true。

代碼如下:

<template>
    //視圖
 <input v-model="username" v-on="changeVal" placeholder="用戶名"><span>dsfsf</span></input>
</template>
<script>
    export default {
        data() {
            return {
               username:'';
            }
        },
        methods: {
         changeVal(e){
              this.loginForm.username=e;
          }
        },
        watch: {
            username:{

              handler(newName){
                 console.log(newName);/
              }
            },
          immediate:true
        }
    }
</script>

監聽的數據后面寫成對象形式,包含handler方法和immediate,之前我們寫的函數其實就是在寫這個handler方法;

immediate表示在watch中首次綁定的時候,是否執行handler,值為true則表示在watch中聲明的時候,就立即執行handler方法,值為false,則和一般使用watch一樣,在數據發生變化的時候才執行handler。

wacth檢測對象屬性數據:deep深度監測

當需要監聽一個對象的改變時,普通的watch方法無法監聽到對象內部屬性的改變,只有data中的數據才能夠監聽到變化,此時就需要deep屬性對對象進行深度監聽。

<template>
    //視圖
 <input v-model="person.username" v-on="changeVal" placeholder="用戶名"><span>dsfsf</span></input>
</template>
<script>
    export default {
        data() {
            return {
               person:{
                 username:''  
              }
            }
        },
        methods: {
         changeVal(e){
              this.loginForm.username=e;
          }
        },
        watch: {
            'person.username':{
              handler(newName){
                 console.log(newName);/
              }
            },
          immediate:true,
          deep:true
        }
    }
</script>

設置deep: true 則可以監聽到cityName.name的變化,此時會給cityName的所有屬性都加上這個監聽器,當對象屬性較多時,每個屬性值的變化都會執行handler,上面的寫法是精准監聽username的變化;

 

改文到這里就結束了,感謝查閱;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM