監(jiān)視屬性—watch

  • 當(dāng)被監(jiān)視的屬性變化時(shí),回調(diào)函數(shù)自動(dòng)調(diào)用,進(jìn)行相關(guān)操作
  • 監(jiān)視的屬性必須存在,才能進(jìn)行監(jiān)視
  • 監(jiān)視的兩種不同寫(xiě)法(請(qǐng)看 基本用法區(qū)域)

基本用法

寫(xiě)法1:

<div id="root">
        <h2>今天的天氣很{{result}}</h2>
        <input type="button" value="切換" @click="change">
    </div>

<script>
            new Vue({
            data() {
                return {
                    isHot: true
                }
            },
            computed: {
                result() {
                    return this.isHot ? '炎熱' : '涼爽'
                }
            },
            methods: {
                change() { this.isHot = !this.isHot }
            },
            watch:{
                result:{
                    immediate:true,  //初始化時(shí)讓handler調(diào)用下
                    handler(newValue,oldValue){
                        console.log('現(xiàn)在是:'+ newValue + ';' + '原本是:'+ oldValue )
                    }
                }
            }
        
        }).$mount('#root')
        </script>

PS:handler方法 和 immediate 屬性 在什么時(shí)候用呢? 答案是:在值最初時(shí)候watch就執(zhí)行

寫(xiě)法2(非創(chuàng)建實(shí)例時(shí)):

        const vm = new Vue({
            data() {
                return {
                    isHot: true
                }
            },
            computed: {
                result() {
                    return this.isHot ? '炎熱' : '涼爽'
                }
            },
            methods: {
                change() { this.isHot = !this.isHot }
            }
           
        
        }).$mount('#root')
        
        vm.$watch('isHot', {
            immediate: true,
            handler(newValue, oldValue) {
                console.log(newValue + '!')
            }
        })

這個(gè)方法是在創(chuàng)建實(shí)例的時(shí)候不知道監(jiān)視什么,后續(xù)用戶調(diào)用的時(shí)候發(fā)現(xiàn)需要監(jiān)視,那么就用這個(gè)方法即可

簡(jiǎn)寫(xiě)(不調(diào)用deep和immediate時(shí)可使用)

例:

watch:{
                result(){
                        console.log('現(xiàn)在是:'+ newValue + ';' + '原本是:'+ oldValue )
                    }
                }

深度監(jiān)視

  • (1)Vue中的 watch 默認(rèn)不監(jiān)測(cè)對(duì)象內(nèi)部值的改變(只有一層監(jiān)視)
  • (2) 配置deep:true 可以監(jiān)測(cè)對(duì)象內(nèi)部值改變(配置就開(kāi)啟多層監(jiān)視)
  • 備注:Vue自身是可以監(jiān)測(cè)到對(duì)象內(nèi)部值的改變的,但是 Vue 提供的 watch 默認(rèn)是不可以的,我們根據(jù)數(shù)據(jù)的具體結(jié)構(gòu),決定是否采用深度監(jiān)視

例:

        <div id="root">
            <h2>a:{{numbers.a}}</h2>
            <input type="button" value="+1" @click="numbers.a++">
        </div>

        <script>
            new Vue({
            data() {
                return {
                    numbers:{
                        a:2,
                        b:1
                    }
                }
            },
            watch:{
                numbers:{
                    deep:true,
                    immediate:true,
                    handler(){
                        console.log('a,改變了')
                    }
                }
            }
        
        }).$mount('#root')

總結(jié)下:
(1)handler 函數(shù)是當(dāng)監(jiān)視對(duì)象發(fā)生改變時(shí)調(diào)用
(2)immediate 默認(rèn)為false ,開(kāi)啟為true。作用是初始化時(shí)就讓 handler 調(diào)用一下(一刷新 handler就立刻運(yùn)行一次)
(3)deep 默認(rèn)為false ,開(kāi)啟為true。開(kāi)啟后作用是深度監(jiān)視

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容