源码

<!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>
`