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

 更新时间:2024年08月07日 10:32:05   作者:天魔老师  
这篇文章主要介绍了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.监视的两种写法:

  • new Vue时传入watch属性
  • 通过app.$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>
    <!--第二种写法:通过计算属性-->
    <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区别

  • computed能完成的功能,watch都可以完成
  • watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作

注意:

  • 所被Vue管理的函数,最好写成普通函数,这样this的指向才是vue实例对象或组件实例对象
  • 所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等),最好写成箭头函数,这样this的指向才是vue的实例或组件的实例对象

总结

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

相关文章

  • Element-plus侧边栏踩坑的问题解决

    Element-plus侧边栏踩坑的问题解决

    本文主要介绍了Element-plus侧边栏踩坑的问题解决,主要解决了el-menu直接嵌套el-menu-item菜单,折叠时不会出现文字显示和小箭头无法隐藏的问题,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • 在uni-app中使用vant组件的方法

    在uni-app中使用vant组件的方法

    最近在做uni-app的时候需要用到vant组件,在网上看到了很多的使用vant组件的方法,但是讲解的大多繁琐,或者无法使用,现把最新,最实用的vant组件的使用方法分享给大家,需要的朋友可以参考下
    2023-02-02
  • vue常用组件之confirm用法及说明

    vue常用组件之confirm用法及说明

    这篇文章主要介绍了vue常用组件之confirm用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue项目webpack中Npm传递参数配置不同域名接口

    vue项目webpack中Npm传递参数配置不同域名接口

    这篇文章主要介绍了vue项目webpack中Npm传递参数配置不同域名接口,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • vue3使用vite搭建的项目需要安装的插件/配置方式

    vue3使用vite搭建的项目需要安装的插件/配置方式

    这篇文章主要介绍了vue3使用vite搭建的项目需要安装的插件/配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 对vue2.0中.vue文件页面跳转之.$router.push的用法详解

    对vue2.0中.vue文件页面跳转之.$router.push的用法详解

    今天小编就为大家分享一篇对vue2.0中.vue文件页面跳转之.$router.push的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • IE11下处理Promise及Vue的单项数据流问题

    IE11下处理Promise及Vue的单项数据流问题

    最近我开发的公司的竞赛网站被发现在IE11下排行榜无数据,但是在其他浏览器没问题,我然后打开控制台一看,发现有问题,纠结了半天才捣腾好,下面小编把方案分享处理,供大家选择
    2019-07-07
  • 在Vue 3中使用OpenLayers加载GPX数据并显示图形效果

    在Vue 3中使用OpenLayers加载GPX数据并显示图形效果

    本文介绍了如何在Vue 3中使用OpenLayers加载GPX格式的数据并在地图上显示图形,通过使用OpenLayers的GPX解析器,我们能够轻松地处理和展示来自GPS设备的地理数据,需要的朋友可以参考下
    2024-12-12
  • vue 组件使用中的一些细节点

    vue 组件使用中的一些细节点

    这篇文章主要介绍了vue 组件使用中的一些细节点,大概有两大细节点,本文通过基础实例给大家介绍的非常详细,需要的朋友参考下吧
    2018-04-04
  • antd中table展开行默认展示,且不需要前边的加号操作

    antd中table展开行默认展示,且不需要前边的加号操作

    这篇文章主要介绍了antd中table展开行默认展示,且不需要前边的加号操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11

最新评论