天天看點

vue中的watch監聽的配置項

watch(偵聽/監聽器)

可以對頁面中已經定義好的變量進行監聽,一旦變量值發生了改變,那麼就可以執行一定操作。

普通監聽

文法格式一:
new Vue({
	el
	data
	methods
	watch:{
		變量名(newVal[,oldVal]){
			業務邏輯代碼...
		}
	}
})
 
文法格式二:
new Vue({
	el
	data
	watch:{
		要監聽的變量名:{
			handler([newVal,oldVal]){
				業務邏輯...
			}
		}
	}
})           

深度監聽

new Vue({
	el
	data
	watch:{
		要監聽的變量名:{
			handler([newVal,oldVal]){
				業務邏輯...
			},
			deep:true;//顯示的進行深度監聽
			immediate: true;//提前執行一下  一般不設定  預設值false
		}
	}
})           

demo案例

<body>
    <div id="app">
        <p>普通監聽</p>
        <input type="text" v-model="msg">
        <p v-show="newVal!=''">最新資料:{{ newVal }} -- 舊資料:{{ oldVla }}</p>
        <p>深度監聽</p>
        <input type="text" v-model="userinfo.name">
        <p>{{ userinfo.name }}</p>
        <div v-for="user of users">
            姓名:<input type="text" v-model="user.name"><br>
            年齡:<input type="text" v-model="user.age"><br>
        </div>
    </div>
    <script>
        new Vue({
            el:'#app',
            data:{//資料
                msg:'',
                newVal:'',
                oldVla:'',
                userinfo:{
                    name:''
                },
                users:[
                    {
                        name:'小明',
                        age:18
                    },
                    {
                        name:'小芳',
                        age:19
                    }
                ]
            },
            methods:{//自定義方法
 
            },
            watch:{//偵聽
                // 普通監聽
                msg(newVal,oldVla){
                    this.newVal = newVal;
                    this.oldVla = oldVla;
                    console.log("資料發送了變化:"+newVal);
                },
                //深監聽
                userinfo:{
                    handler(newVal){
                        console.log('使用者資訊發送改變:'+newVal.name);
                    },
                    deep:true //是否深度監聽 預設false
                },
                users:{
                    handler(newVla){
                        console.log('使用者資訊發送改變');
                    },
                    deep:false
                }
            }
        })
    </script>
</body>