监视属性

1、监视对象:普通属性、计算属性

2、当监视对象发生变化时,watch中的handler函数自动调用

3、常用属性

immediate:true 立刻执行,无论监视对象发没发生变化

depp: true 深度属性监视,一般只监视一层

4、两种写法

  new Vue 传入 watch

watch:{
                isHot:{
                    deep:true,
                    immediate:true,
                    handler(newVlaue, oldValue){
                        console.log("监视", newVlaue, oldValue)
                    }
                }
            }

  通过vm.$watch(监视的对象,{handler方法})

vm.$watch("isHot",{
            handler(newVlaue, oldValue){
                        console.log("监视", newVlaue, oldValue)
                    }
        })

4、简写

不使用immediate和deep时

watch:{
                //只用handler方法
                isHot(newValue, oldValue){
                    console.log("监视", newValue, oldValue)
                }
            }
vm.$watch("isHot",function(newValue, oldValue){
            console.log("正在监视", newValue, oldValue)
        })
<!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">
    <title>监视属性</title>
    <script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
    <div id="container">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeather">点击切换</button>
    </div>
    <script type="text/javascript">
        const vm = new Vue({
            el:"#container",
            data:{
                isHot: true,
            },
            computed:{
                // 只用到get 简写
                info(){
                    return this.isHot ? "炎热":"凉爽"
                }
            },
            methods: {
                changeWeather(){
                    return this.isHot = ! this.isHot
                }
            },
       /*      watch:{
                //只用handler方法
                isHot(newValue, oldValue){
                    console.log("监视", newValue, oldValue)
                }
            }  */
        })
        vm.$watch("isHot",function(newValue, oldValue){
            console.log("正在监视", newValue, oldValue)
        })
    </script>
</body>
</html>

 5、computed和watch的区别

a、能被computed实现的函数,都能被watch实现,能被watch实现的,不一定能别computed实现,异步操作

b、被Vue管理的函数,写成普通函数;不被Vue管理的函数写成箭头函数(定时器回调函数、ajax回调函数、Promise回调函数)