源码
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>天气案例_监视属性</title>
<!-- 引入Vue -->
<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
<!--
监视属性watch:
1.当被监视的属性变化时, 回调函数(指下面watch中监视属性值的配置对象中的handler)自动调用, 进行相关操作
2.监视的属性必须存在,才能进行监视!
3.监视的两种写法:
(1).new Vue时传入watch配置
(2).通过vm.$watch监视
-->
<!-- 准备好一个容器-->
<div id="root">
<h2>今天天气很{{info}}</h2>
<button @click="changeWeather">切换天气</button>
</div>
</body>
<script type="text/javascript">
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
const vm = new Vue({
el:'#root',
data:{
isHot:true,
},
computed:{
info(){
return this.isHot ? '炎热' : '凉爽'
}
},
methods: {
changeWeather(){
this.isHot = !this.isHot
}
},
//监视属性 的定义:监视某个属性的变化。
//监视属性 第1种写法: 直接在 vm对象中写 watch:{ key:{配置对象}}
/* watch:{
//此处指定监视对象为 data中的 isHot属性。 也可以监视 computed中的计算属性.
//原始写法'isHot',但是key两边的单引号通常省略。
isHot:{
immediate:true, //配置项immediate: true-页面刚初始化时让handler调用一下.
//handler什么时候调用?当isHot发生改变时。
//handler()默认的2个参数:
// newValue: 新的值
// oldValue: 旧的值
handler(newValue,oldValue){
console.log('isHot被修改了',newValue,oldValue)
}
}
} */
})
//监视属性 第2种写法: 首先要保证vm已经实例化完了,然后再告诉 vm.$watch('你要监视哪个属性',{配置对象})
vm.$watch('isHot',{
immediate:true, //初始化时让handler调用一下
//handler什么时候调用?当isHot发生改变时。
handler(newValue,oldValue){
console.log('isHot被修改了',newValue,oldValue)
}
})
/*上面两种监视属性的写法的使用技巧:
如果你一开始知道了要监视谁,那么就可以使用第1种写法;
如果你需要用户的一些行为,那么就可以使用第2种写法;
*/
</script>
</html>
`