vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > vue监视器@Watch创建执行immediate

vue监视器@Watch创建执行immediate方式

作者:天魔老师

这篇文章主要介绍了vue监视器@Watch创建执行immediate方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue监视器@Watch创建执行immediate

vue监视器@Watch的immediate参数,表示在watch中首次绑定的时候,是否执行handler函数,

1.值为true则表示在watch中声明的时候,就立即执行handler方法,

2.值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

async created() {  
    // await this.refreshMessageBody()
}

@Watch('message',{
    immediate:true,    
    // immediate表示在watch中首次绑定的时候,是否执行handler,
    // 值为true则表示在watch中声明的时候,就立即执行handler方法,
    // 值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。
})
async refreshMessageBody(){
    console.log("message改变了");
    await this.func1();
    await this.func2();
}

vue监视属性(watch)

监视属性

监视属性watch:

1.当被监视的属性变化时,回调函数自动调用,进行相关操作

2.监视的属性必须存在,才能进行监视

3.监视的两种写法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视</title>
    <script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">
  	<!--第一种写法-->
    <h2>今天天气很{{isHot ? '炎热':'凉爽'}}</h2>
    <!--第二种写法:通过计算属性-->
    <h2>今天天气很{{info}}</h2>
    <!--绑定methods的方法-->
    <button @click="change">点击切换天气</button>
    <!--离谱写法:适用于简单测试-->
    <button @click="isHot = !isHot">点击切换天气</button>
</div>

<script>
    let app = new Vue({
        el: '#app',
        data: {
            isHot: true
        },
        methods: {
          change: function (){
              this.isHot = !this.isHot
          }
        },
        computed: {
            info: {
                get: function (){
                    if (this.isHot==true){
                        return '炎热'
                    }else{
                        return '凉爽'
                    }
                },
                set: function (){
                    this.isHot = !this.isHot
                }

            }
        },
        watch: {
            //监视谁
            isHot: {
                //什么时候调用?当isHot改变
                handler(newValue,oldValue) {
                    console.log('isHot被修改惹',newValue,oldValue)
                },
                //初始化时让handler调用一下
                immediate: true
            }
        }
    })
    //可以替换上面的watch属性
    app.$watch('isHot',{
        //什么时候调用?当isHot改变
        handler(newValue,oldValue) {
            console.log('isHot被修改惹',newValue,oldValue)
        },
        //初始化时让handler调用一下
        immediate: true
    })
</script>
</body>
</html>

深度监视

深度监视:

​ 1.vue中的watch默认不监测对象内部值的改变(一层)

​ 2.配置deep:true可以检测对象内部值改变(多层次)

备注:

​ 1.vue自身可以监测对象内部值的改变,但vue提供的watch默认不可以

​ 2.使用watch时根据数据的具体结构,决定是否采用深度监视

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>监视简写形式</title>
    <script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">

    <h2>今天天气很{{isHot ? '炎热':'凉爽'}}</h2>

    <button @click="change">点击切换天气</button>
</div>

<script>
    let app = new Vue({
        el: '#app',
        data: {
            isHot: true,
            numbers: {
                a: 1,
                b: 2
            }
        },
        methods: {
          change: function (){
              this.isHot = !this.isHot
          }
        },
        computed: {
            info: {
                get: function (){
                    if (this.isHot==true){
                        return '炎热'
                    }else{
                        return '凉爽'
                    }
                },
                set: function (){
                    this.isHot = !this.isHot
                }

            }
        },
        watch: {
            //完整写法
            // isHot: {
            //     // deep: true,深度监视
            //     handler(newValue,oldValue) {
            //         console.log('isHot被修改惹',newValue,oldValue)
            //     },
            //     //初始化时让handler调用一下
            //     // immediate: true
            // },
            //简写
            isHot(newValue,oldValue){
                console.log('isHot被修改了',newValue,oldValue)
            }
        }
    })
    //完整写法
    app.$watch('isHot',{
        //什么时候调用?当isHot改变
        handler(newValue,oldValue) {
            console.log('isHot被修改惹',newValue,oldValue)
        },
        //初始化时让handler调用一下
        immediate: true
    })
    //不允许写箭头函数,会导致this指向的不是app,
    // vue管理的函数(methods中的,computed,watch中的)都得写普通函数,
    // 不能写es6里的箭头函数
    app.$watch('isHot',function(newValue,oldValue) {
        console.log('isHot被修改惹',newValue,oldValue)
    })
</script>
</body>
</html>

监视效果:

computed VS watch

计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。

这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。

当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的

computed与watch区别

注意:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文