<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
    <title>监听属性基本实现方式总结</title>
</head>

<body>
    <div id="app">
        <h2>今天天气很{{info}}</h2>
        <button @click='changeMeater()'>切换</button>
    </div>
    <script>
        const vm = new Vue({
            el: "#app",
            data() {
                return {
                    isHost: true
                }
            },
            // 这是计算属性computed
            computed: {
                info() {
                    return this.isHost ? '炎热' : '寒冷'
                }
            },
            methods: {
                changeMeater() {
                    this.isHost = !this.isHost
                    console.log('------', vm)
                }
            },
            //1. 监听方式1:new Vue 里面使用watch
            // 监听属性值的变化
            watch: {
                isHost: {
                    // handler函数时候在isHost发生改变的时候调用   参数 :newValue  , oldValue  是改变前后的值
                    // 案例:假设是做一个温度,就可以用前后的值相加减,做一些业务逻辑
                    handler(newValue, oldValue) {
                        console.log('isHost改变了', newValue, oldValue)
                    },
                    // immediate 是初始化时,让handler调用一下
                    immediate: true,
                    deep: true //开启深度监听功能,例如属性是一个对象的时候,可以监听到里面的属性

                },
                // 同理,改变后的info也可以监听
                info: {
                    // handler函数时候在isHost发生改变的时候调用   参数 :newValue  , oldValue  是改变前后的值
                    // 案例:假设是做一个温度,就可以用前后的值相加减,做一些业务逻辑
                    handler(newValue, oldValue) {
                        console.log('info改变了', newValue, oldValue)
                    },
                    // immediate 是初始化时,让handler调用一下
                    immediate: true,

                },


            },


        })

        /*

            //2. 监听方式2,用vue的实例vm:    需要传两个参数,1 要监听谁,2.怎么监听
            vm.$watch('isHost', {
                // handler函数时候在isHost发生改变的时候调用   参数 :newValue  , oldValue  是改变前后的值
                // 案例:假设是做一个温度,就可以用前后的值相加减,做一些业务逻辑
                handler(newValue, oldValue) {
                    console.log('isHost改变了', newValue, oldValue)
                },
                // immediate 是初始化时,让handler调用一下
                immediate: true,

            })
        */
    </script>

</body>


</html>