监视属性
一级监视
<div id="root">
<h1>今天天气很{{info}}</h1>
<!-- 可以写一些简单的语句 -->
<button @click='isHot = !isHot'>切换天气</button>
<button @click='changeWeather'>切换天气</button>
<hr/>
<h2>a的值为:{{number.a}}</h2>
<button @click='number.a++'>点我a++</button>
<h2>b的值为:{{number.b}}</h2>
<button @click='number.b++'>点我b++</button>
</div>
<script type="text/javascript">
Vue.config.productionTip = false;
const vm = new Vue({
el:'#root',
data:{
isHot:true,
number:{
a:1,
b:1
}
},
methods:{
changeWeather(){
this.isHot = !this.isHot
}
},
computed:{
info(){
return this.isHot ? '炎热':'凉爽'
}
},
//监视
watch:{
isHot:{
// immediate:true,//初始化时让handler调用一下
//当isHot改变时调用,同时计算属性info也可以被监视
handler(newValue,oldValue){
alert(newValue+''+oldValue)
}
},
});
//监视属性的两种写法
vm.$watch('isHot',{
// immediate:true,//初始化时让handler调用一下
//当isHot改变时调用,同时计算属性info也可以被监视
handler(newValue,oldValue){
alert(newValue+''+oldValue)
}
})
</script>
多级监视
<script type="text/javascript">
Vue.config.productionTip = false;
const vm = new Vue({
el:'#root',
data:{
isHot:true,
number:{
a:1,
b:1
}
},
methods:{
changeWeather(){
this.isHot = !this.isHot
}
},
computed:{
info(){
return this.isHot ? '炎热':'凉爽'
}
},
//监视
watch:{
//多级监视属性中某个属性变化
'number.a':{
handler(){
console.log(this.number.a);
}
},
//多级监视里面任意一个属性发生变化会触发handler
'number':{
deep:true,//关键
handler(){
console.log('number改变')
}
},
</script>
简写形式
<script type="text/javascript">
Vue.config.productionTip = false;
const vm = new Vue({
el:'#root',
data:{
isHot:true,
number:{
a:1,
b:1
}
},
methods:{
changeWeather(){
this.isHot = !this.isHot
}
},
computed:{
info(){
return this.isHot ? '炎热':'凉爽'
}
},
//监视
watch:{
//简写形式
isHot(newValue,oldValue){
alert(newValue+''+oldValue)
}
}
});
</script>