(九)Vue之侦听/监听/监视属性

news2025/2/25 21:38:35

文章目录

  • 普通实现
  • 监视属性实现
    • Vue里配置监视属性
    • Vue外配置监视属性
    • 配置属性
      • immediate配置
      • deep(深度监视)配置
        • 普通监视
        • 监视多级结构中某个属性的变化
        • 监视多级结构中所有属性的变化
        • 监视属性简写
          • watch配置简写
          • $watch配置简写
  • 监视属性vs计算属性

Vue学习目录

上一篇:(八)Vue之计算属性

先看一个需求:点击按钮切换在凉爽和炎热之间切换
请添加图片描述
请添加图片描述

普通实现

    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeater">切换天气</button>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false//阻止 vue 在启动时生成生产提示。
        const vm = new Vue({
            el:'#root',
            data:{
                isHot:true
            },
            computed:{
                info(){
                    return this.isHot ? '炎热' : '凉爽'
                }
            },
            methods:{
                changeWeater(){
                    this.isHot = !this.isHot
                }
            }
        });
    </script>

监视属性实现

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听/监听/监视属性。
可以通过 watch 来响应数据的变化。
watch:

  • 1.当被监视的属性变化时, 回调函数自动调用, 进行相关操作
  • 2.监视的属性必须存在,才能进行监视!!
  • 3.监视的两种写法:
    • (1)new Vue时传入watch配置
    • (2)通过vm.$watch监视

Vue里配置监视属性

handler就是处理监听变动时的函数
可以传两个参数:

  • 第一个参数:被监视的属性新的值
  • 第二个参数:被监视的属性旧的值

handler什么时候调用?当被监视的属性发生改变时。

<!-- 准备好一个容器-->
    <div id="root">
        <h2>今天天气很{{info}}</h2>
        <button @click="changeWeater">切换天气</button>
    </div>
    <script type="text/javascript">
        Vue.config.productionTip = false//阻止 vue 在启动时生成生产提示。
        const vm = new Vue({
            el:'#root',
            data:{
                isHot:true,
                info:'炎热'
            },
            methods:{
                changeWeater(){
                    this.isHot = !this.isHot
                }
            },
            watch:{
                isHot:{
                    handler(newValue,oldValue){
                        console.log('isHot被修改了',newValue,oldValue)
                        this.info = newValue ? '炎热' : '凉爽'
                    },
                }
            }
        });

效果:
请添加图片描述
请添加图片描述

Vue外配置监视属性

使用$watch配置,两个参数

  • 第一个参数:要监视的属性
  • 第二个参数:配置对象

在Vue外进行配置

	vm.$watch('isHot',{
            handler(newValue,oldValue){
                console.log('isHot被修改了',newValue,oldValue)
                this.info = newValue ? '炎热' : '凉爽'
            }
        })

配置属性

immediate配置

watch监听的属性最初绑定时不会执行,等到监听属性发生改变时才执行监听,如果想要一开始就让他最初绑定的时候就执行可以配置immediate配置项

  • immediate属性:默认为false,作用是初始化时是否调用handler函数
		watch:{
                isHot:{
                    handler(newValue,oldValue){
                        console.log('isHot被修改了',newValue,oldValue)
                        this.info = newValue ? '炎热' : '凉爽'
                    },
                    immediate:true
                }

效果:
在这里插入图片描述

deep(深度监视)配置

deep配置是用来进行深度监视的
深度监视:

  • (1).Vue中的watch默认不监测对象内部值的改变(一层)。
  • (2).配置deep:true可以监测对象内部值改变(多层)。
  • (3).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
  • (4).使用watch时根据数据的具体结构,决定是否采用深度监视。

普通监视

	<div id="root">
        <h3>a的值是:{{numbers.a}}</h3>
        <button @click="numbers.a++">点我让a+1</button>
        <h3>b的值是:{{numbers.b}}</h3>
        <button @click="numbers.b++">点我让b+1</button><br>
        <button @click="numbers = {a:666,b:888}">彻底替换掉numbers</button>
    </div>
	new Vue({
            el:'#root',
            data:{
                numbers:{
                    a:1,
                    b:1
                }
            },
            watch:{
            	numbers:{
                    handler(){
                        console.log('a被修改了')
                    }
            }
    });

效果:分别给numbers加1,监视属性都没监视到
在这里插入图片描述
把numbers彻底替换掉,监视属性起作用
在这里插入图片描述

监视多级结构中某个属性的变化

监听的属性需要字符串形式,是属性的原本书写方式,因为是作为key使用,我们平时使用的是简写的形式
这样就能监视到numbers中的a属性

	new Vue({
            el:'#root',
            data:{
                numbers:{
                    a:1,
                    b:1
                }
            },
            watch:{
            	'numbers.a':{
                    handler(){
                        console.log('a被修改了')
                    }
            }
    });

监视多级结构中所有属性的变化

配置deep:true可以监测对象内部值改变

 watch:{
		numbers:{
                    deep:true,
                    handler(){
                        console.log('numbers被修改了')
                    }
                }
       }

效果:不管是a、b、还是numbers彻底改变,都能监视到。
在这里插入图片描述

监视属性简写

当只有handler,不需要其他配置项时,监视属性可以简写。
以天气案例的isHot属性为例

watch配置简写
	watch:{
				//正常写法
                /*isHot:{
                    // immediate:true, //初始化时让handler调用一下
                    // deep:true,//深度监视
                    handler(newValue,oldValue){
                        //业务代码
                    }
                }*/
                //简写
                isHot(newValue,oldValue){
                   //业务代码
                }
            }
$watch配置简写
		//正常写法
        /* vm.$watch('isHot',{
            immediate:true, //初始化时让handler调用一下
            deep:true,//深度监视
            handler(newValue,oldValue){
                 //业务代码
            }
        }) */
        //简写
        vm.$watch('isHot',(newValue,oldValue)=>{
            //业务代码
        })

监视属性vs计算属性

通过天气的案例我们不难发现,监视属性和计算属性都能实现功能。
computed和watch之间的区别:

  • 1.computed能完成的功能,watch都可以完成。但是一般优先选择计算属性实现。
  • 2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java农产品推广平台98966

对于计算机专业的学生最头疼的就是临近毕业时的毕业设计,对于如何选题,技术选型等这些问题,难道了大部分人,确实,还没毕业的学生对于这些问题还比较陌生,只有学习的理论知识,没有实战经验怎么能独自完成毕业设计这一系列的流程,今天我们就聊聊如何快速应对这一难题. 比较容易的…

ITK 形态学中的开运算和闭运算 腐蚀 膨胀

一. 图像形态学处理 —— 膨胀和腐蚀 腐蚀在二值图像的基础上做“收缩”或“细化”操作; 膨胀在二值图像的基础上做“加长”或“变粗”的操作。 什么是二值图像呢&#xff1f;把一幅图片看做成一个二维的数组&#xff0c;那么二值图像是一个只有0和1的逻辑数组&#xff0c;我们…

vertical-align属性

vertical-align属性 CSS的vertical-align属性使用场景&#xff0c;经常用于设置图片或者表单(行内块元素)和文字垂直对齐 用于设置一个元素的垂直对齐方式&#xff0c;但是它只针对于行内元素或者行内块元素有效 源代码 语法&#xff1a; vertical-align { baseline | top | …

序——在linux下学习C语言

目录 在Linux下学习C语言的前提。。。 一、Linux的一些常见命令 二、Linux中VI和VIM的一些命令操作 1、在VIM中控制光标 2、vim中的插入模式 3、退出插入模式的方法 4、在VIM模式中的删除命令 5、撤销命令 6、 粘贴和拷贝命令 7、查看文件信息和寻找另一半括号 8、缩…

十万部冷知识:日本国歌为什么像哀乐?

大家在世界杯上看日本队比赛的时候&#xff0c;有没有感觉他们的国歌跟哀乐似的&#xff0c;听着就跟在办葬礼一样。其实&#xff0c;这还真不是像与不像的问题&#xff0c;而是因为它确实是一首挽歌。 这首歌叫《君之代》&#xff0c;出自于《古今和歌集》&#xff0c;是在天皇…

关于Servlet编程(1)

1.Servlet编程中常见网页错误 404错误 : 访问不存在 一般都是路径出错. 405错误 : 请求方法不允许 使用访问的方法有误 只书写了接受Get方法的代码.却使用POST方法访问. 代码中忘记注释super()方法也会返回405 因为源码是直接返回405的 这里展示的两段代码都会引发上图的40…

[附源码]计算机毕业设计健康医疗体检Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

powershell实现发送win10系统通知

powershell实现发送win10系统通知 一、实现方式是使用系统自带的类NotifyIcon 关于Notify类的属性和使用方法可以查阅NotifyIcon官方文档&#xff0c;这主要讲一下用到的几个变量和方法。 1. Icon Icon只支持 .ico格式的图标&#xff0c;属于自定义图标&#xff0c;只有当 Ba…

PLC、运动控制卡、运动控制器,傻傻分不清

前言 最近有不少做PLC开发的小伙伴&#xff0c;在一些咨询运动控制卡、运动控制器相关的问题&#xff0c;很多人不清楚它们之间有什么区别和联系&#xff0c;今天跟大家就PLC、运动控制卡、运动控制器区别及选型做个分享。 背景 随着工业技术的发展&#xff0c;工业机器人应…

怎么调整视频画布?这些技巧你知道吗?

小伙伴们平时在制作视频时是否有遇到过这种情况&#xff1a;从网站下载的视频素材画面过大&#xff0c;两边还带有黑边&#xff0c;插入到自己的视频后&#xff0c;显得视频整体上很突兀&#xff0c;美观度也受到影响&#xff0c;没有达到自己预期的效果。 如果你们也有这样的烦…

什么是CodeArts?

什么是CodeArts 软件开发生产线&#xff08;CodeArts&#xff09;原名“软件开发平台&#xff08;DevCloud&#xff09;”是集华为近30年研发实践、前沿研发理念、先进研发工具为一体的一站式云端DevOps平台&#xff0c;面向开发者提供的云服务&#xff0c;即开即用&#xff0…

从开环到闭环的旅程-CoCube

差动驱动机器人轨迹-CoCube 迷宫逃离的问题-CoCube 自由运动和环境限制-CoCube 001&#xff0c;自由运动 002&#xff0c;引出环境 003&#xff0c;对比差异 ROS机器人从起点到终点&#xff08;四&#xff09;蓝桥云实践复现 cocube自由运动机器人也需要一个目标&#xff…

JSON数据交互方式

目录 一、JSON的特点 二、前后端开发推荐使用工具ApiPost 扩展&#xff1a;xml与json的区别 三、JSON语法格式 语法注意点&#xff1a; 四、在html中定义json数据类型 1.单个实体——>JSON数据 2.数组实体——>JSON数据 3.集合实体——>JSON数据 五、JSON数据…

Redis的缓存穿透

文章目录1. 缓存穿透的理解2. 常见的解决方案有两种&#xff1a;3. 布隆过滤&#xff1a;4. 编码解决查询的缓存穿透问题&#xff1a;1. 缓存穿透的理解 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到…

安科瑞企业微电网AcrelEMS-MED医院能效管理平台应用分析

安科瑞 李亚俊 平台概述 AcrelEMS-MED医院能效管理平台依据《医疗建筑电气设计规范》《绿色医院建筑评价标准》、《医院建筑能耗监管系统建设技术导则》等行业规范建设&#xff0c;由电力监控及能效管理系统组成&#xff0c;涵盖了医院中压变配电系统、应急电源、隔离电源、照…

刷题11-和大于或等于K的最短子数组

刷题008-和大于或等于K的最短子数组 首先&#xff0c;审题要认真&#xff0c;题目说的是>target的长度最小的连续子数组&#xff0c;也就是返回值最小为0&#xff0c;其次是1 核心思想&#xff1a;设置两个指针left和right&#xff0c;初始都指向0&#xff0c;当sum<ta…

java学习day60(乐友商城)搭建后台、使用nginx进行反向代理、实现查询功能

1.搭建后台管理前端 1.1.导入已有资源 后台项目相对复杂&#xff0c;为了有利于教学&#xff0c;我们不再从0搭建项目&#xff0c;而是直接使用课前资料中给大家准备好的源码&#xff1a; 我们解压缩&#xff0c;放到工作目录中&#xff1a; 然后在Intellij idea中导入新的工…

(一)RT-Thread入门——内核介绍

目录 内核介绍 线程调度 时钟管理 线程间同步 线程间通信 内存管理 I/O 设备管理 总结 今天就开始学习有关RT-Thread的相关知识了&#xff0c;准备理论和实践同时进行&#xff0c;目前这一部分是原理理论部分&#xff0c;后面会结合实际的例子来加强学习&#xff0c;系…

Kubernetes 平台的生态系统介绍

Kubernetes作为一个容器云管理平台&#xff0c;与底层的基础架构、企业周边的公共服务形成了一个完备的生态系统。如图1所示&#xff0c;一个完备的Kubernetes系统在设计和实现时&#xff0c;需要考虑多层面的高可用性问题。 图1 Kubernetes 平台的生态系统因此&#xff0c;解…

一、计算机网络体系结构(二)参考模型

目录 2.1计算机网络分层结构 2.2协议、接口、服务的概念 2.2.1语法、语义和同步 2.2.2服务访问点&#xff08;SAP&#xff09; 2.2.3服务 2.3ISO/OSI参考模型和TCP/IP模型 2.3.1常见的三种参考模型 2.3.2 OSI参考模型 2.3.3 TCP/IP参考模型 2.1计算机网络分层结构 …