Vue学习笔记(六)计算属性和监听属性

Vue中的计算属性与监听器 Vue中的计算属性与监听器;Vue;计算属性;侦听器;Computed;watch 阅读详情

计算属性


计算属性是通过逻辑业务的处理,返回一个逻辑处理后的属性。计算属性通过computed来使用

computed在处理上和methods相似,但不同的是,methods在使用时要执行里面的操作再返回值,而computed在执行前会检查用于计算的属性是否发生改变,如果没有改变,则使用上次缓存下来的值,而一旦里面的属性发生改变,computed会自动重新计算当前值

<div id="app">
    <input type="text" v-model="first">
    <input type="text" v-model="second">
    <input type="text" v-model="third">
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data: {
            first: "",
            second: ""
        },
        computed: {
                // 只要计算属性中用到的值发生改变,就会重新计算该属性,如果没有改变,该计算所得的值会被缓存起来重复使用
            third: function() {
                return `${this.first}-----${this.second}`
            }
        }
    })
</script>

在这段代码中,用于计算的first和second每次改变都会导致third重新计算,所以每次修改first和second时third就会随之改变。

setter方法

计算属性默认情况下使用getter方法,当也可以自己添加一个setter方法,这样在改变当前值时可以修改其他的值

<div id="app">
    <input type="text" v-model="first">
    <input type="text" v-model="second">
    <input type="text" v-model="third">
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data: {
            first: "",
            second: ""
        },
        computed: {
            third: {
                get: function() {
                    return `${this.first}-----${this.second}`
                },
                set: function(newVal) {
                    let val = newVal.split('-----')
                    this.first = val[0]
                    this.second = val[1]
                }
            }
        }
    })
</script>

这段代码实现了在改变first和second中任一个时会修改third,而修改third时first和second也会改变

监听属性


与计算属性computed构建一个不存在的值不同,监听属性watch是监听一个已存在的值,当监听的值发生改变时就进行定义好的逻辑操作。

<div id="app">
    <input type="text" v-model="first">
    <input type="text" v-model="second">
    <input type="text" v-model="third">
</div>

<script>
    let vm = new Vue({
        el: "#app",
        data: {
            first: "",
            second: "",
            third: ""
        },
        watch: {
            "first": function(newVal, oldVal) {
                //第一个参数为更新后的值,第二个参数为更新前的值
                console.log(`first:${newVal}--------${oldVal}`)
                this.third = `${this.first}---${this.second}`
            },
            "second": function(newVal, oldVal) {
                console.log(`second:${newVal}--------${oldVal}`)
                this.third = `${this.first}---${this.second}`
            }
        }
    })
</script>

这里通过对first和second两个数进行监听,当两个数中任一个发生改变时就修改third的值。

上面的用法监听到了first和second的数据变化,这里这两个值都只是一个字符串,那么如果是对象的话呢

对于对象的监听

对于函数的监听,使用上面的方法,只有在函数重新赋值(改变函数的引用时有用)

<template>
  <div id="app">
    <input type="text" v-model="name">
    <button @click="change">click</button>
  </div>
</template>

<script>

export default {
  name: 'app',
  data(){
    return{
      testObj:{
        id:1,
        name:'john'
      },
      count:1,
      name:'john'
    }
  },
  methods:{
    change(){
      this.testObj={
        id:++this.count,
        name:this.name,
      }
    }
  },
  watch:{
    testObj:{
      handler(newVal,oldVal){
        console.log('newVal',newVal)
        console.log('oldVal',oldVal)
      }
    }
  }
}
</script>

上面的代码在点击按钮时会打印出相应的内容,但是如果只修改部分属性,是不会显示内容的,如果我们要对单个属性进行修改,可以采用字符串形式监听

<template>
  <div id="app">
    <input type="text" v-model="name">
    <button @click="change">click</button>
  </div>
</template>

<script>

export default {
  name: 'app',
  data(){
    return{
      testObj:{
        id:1,
        name:'john'
      },
      name:'john'
    }
  },
  methods:{
    change(){
      this.testObj.name=this.name;
    }
  },
  watch:{
    'testObj.name':{
      handler(newVal,oldVal){
        console.log('newVal',newVal)
        console.log('oldVal',oldVal)
      }
    }
  }
}
</script>

此外,也可以利用computed来获得属性的引用,以便于在watch中监听

computed:{
  objName(){
    return this.testObj.name
  }
},
watch:{
  objName:{
    handler(newVal,oldVal){
      console.log('newVal',newVal)
      console.log('oldVal',oldVal)
    }
  }
}

若要对所有属性监听,可以采用computed来一个个监听,也可以通过设置deep:true来做到

watch:{
  testObj:{
    handler(newVal,oldVal){
      console.log('newVal',newVal)
      console.log('oldVal',oldVal)
    },
    deep:true
  }
}

设置deep:true后,不管对象中哪一个属性发生变化,都会被监听到,触发相应的handler事件

Vue.js中的计算属性 computed 与监听属性 watch深入探索 计算属性 computed核心特性: 提供基于其他响应式状态的衍生值,具备缓存机制,只在依赖状态变化时重新计算,有效提升性能。应用场景: 需要在模板中展示经过计算得出的值,如过滤、格式化、汇总等。特点: 自动追踪依赖关系,支持多依赖,减少模板中的复杂逻辑。监听属性 watch功能: 监听响应式数据或表达式的变更,并在变更时执行自定义回调函数。应用场景: 数据变化后需要执行特定操作,如触发异步请求、更新DOM、执行业务逻辑等。特性: 支持动态监听、立即执行(immediate)、深层监听( 阅读详情

相关推荐

【一键搞定】ThinkPHP6.0.2+PHPStudy+Composer极速安装指南——附完整下载包与避坑技巧

本文提供了一份ThinkPHP6.0.2的完整下载包,并详细介绍了如何配合PHPStudy和Composer进行极速安装与配置。指南涵盖了环境准备、Composer国内镜像加速、项目部署及常见避坑技巧,旨在帮助开发者,尤其是内网或网络不佳的用户,快速搭建可运行的TP6开发环境,绕过依赖下载的繁琐步骤。

assembly8low的博客 1008

Vue.js商城15天从零实战课程、跨平台APP开发(含源代码)

学会Vue.js的商城开发学会Vue.js和后台数据接口的使用本课程是实战课程,需要了解js和vue.js的基础知识;主要讲解移动商城首页、商城分类、商城购物车、产品分类、产品列表、评论、地址管理、下单、会员注册、会员登录、密码修改、订单列表、收藏、信息列表和详情等功能...

学习十八-UJA107xA简介及移植-0

目录 1、UJA107xA系列手册 1、介绍 2.2.1 BAT引脚功能 2.4.1 V1、V2稳压器 2.5.1 CAN收发器 3.1 Startup Operation 3.2 Normal Operation 5.1 Attached Files 5.2 NXP UJA107xA Example Software 6、main() 1、UJA107xA系列手册 看完手册关于使用还是没有头绪的,只是想SPI发送指令将V2驱动起来,进而驱动起来CAN收...

m0_56344230的博客 1707

vue-无法监听对象中新增属性的变化问题

Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。父组件给子组件传递的props里面有一个值是一个对象,在子组件中通过watch监听该对象的变化,已经加上了。的相关配置,但是还是无法监听到该值的改变。解决办法 this.$set方法解决。

assassin_0302的博客 871

详解STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用

本文详细解析了STM32F407双重ADC同步采集与DMA传输的配置技巧及实战应用。通过CubeMX配置、代码实现和常见问题解决方案,帮助开发者高效实现多通道数据同步采集,提升工业自动化和嵌入式系统的数据采集效率与精度。

ii567的博客 365

YOLOv8改进 | 主干篇 | 利用MobileNetV2替换Backbone(轻量化网络结构)

本文给大家带来的改进机制是,其是专为移动和嵌入式视觉应用设计的轻量化网络结构。这些模型基于简化的架构,并利用深度可分离卷积构建轻量级深度神经网络,其引入了两个简单的全局超参数,用于在延迟和准确性之间进行有效的权衡。实验表明,MobileNets在资源和准确性的权衡方面表现出色,并在多种应用(如对象检测、细粒度分类、面部属性识别和大规模地理定位)中展现了其有效性,这个模型非常适合轻量化的读者来使用。适用检测目标:轻量化网络结构适合轻量化的读者⭐⭐⭐⭐。

Snu77的博客 5686

Vue对象新增属性无法监听到问题

解决方法:在新增属性的通知Vue对新增属性进行监听 1、Vue.set(someObject,prop,value) 2、this.someObject = Object.assign({},someObject,value) 原理:把一个新的完整对象赋值给data中的某个属性,Vue会遍历这个对象内的所有属性,并通过Object.defineProperty,将这些property全部转化为getter/setter从而实现对属性的监听。直接通过this.someObject.prop无法监听到的原因:对

weixin_44198018的博客 3717

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

Vue渲染九九乘法表

【代码】Vue渲染九九乘法表。

qq_73827493的博客 291

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 329

爬虫Incapsula reese84加密案例:Etihad航空(纯算法)

爬虫Incapsula reese84加密案例:Etihad航空,本文就不再讲解如何找加密参数、定位加密参数,以及分析加密的一个过程。就直接从扣算法开始,扣算法前先看之前讲解的加密函数生成的过程,文章会一个函数一个函数的讲解扣算法。fiddler根据规则替换本地文件。调试过程中遇到部分环境不一样是正常的,具体还要根据自己调试的js为准,就像之前补环境时是有二十一个循环,这次扣算法多出一个循环,不过大部分环境是一样的第一个函数:通过document.addEventListener添加了很多事件。

老衲爱洗头的博客 1994

v-for循环输出图片及信息展示

有时我们写页面时可能会遇到要求图片展示的,类似下图这种 如果是用vue写前端的话那就很方便了,vue中的v-for指令(列表渲染) 这里先附上v-for官方文档 以下面这个小demo为例: HTML代码: <template> <div id="app"> <div class="card" v-for="message in messages" :...

糖长老莫小贝的博客 9208

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Vue 计算属性与监听属性

前面的话 模板内的表达式常用于简单的运算,当其过长或逻辑复杂时,会难以维护。这篇文章将介绍计算属性与监听属性去解决该问题。 计算属性 [什么是计算属性?] 首先,来看一个字符串反转的例子: <div id="app1"> {{ message.split('').reverse().join('') }} </div> <s...

小柒的前端之旅 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Vue 计算属性和监听器

Vue 计算属性和监听器总结。

m0_52861684的博客 2001

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Vue】计算属性和监听属性

对于使用ref函数定义的基本数据类型,则直接监听即可,示例代码如下:width += 1;} </ script > < template > < div > < p > 宽度:{{ width }} </ p > < button @click = " onUpdateWidth " > 修改width </ button > </ div > </ template >importwidth += 1;

sishihao的博客 1428

Vue的计算属性computed和监听属性watch

Vue

我的身体只需要很少的粮食就能养活;而我的灵魂却非常地贪婪,需要日月星辰、山川湖泊和大自然的滋养。 1万+

vue计算属性和监听属性

一、计算属性(computed) 当依赖的data对象中的属性值发生变化时,将会触发计算方法,在data对象中生成新的变量,并且会将新的变量缓存起来;(只要依赖的data对象属性值不发生改变,将不会触发计算方法;) ...

self_challenge的博客 2038

Vue的监听属性

文章目录监听属性深度监听 监听属性 监听的属性发生变化时,会自动调用回调函数,执行相关操作。 监听属性有两种写法,如下: new Vue()中传入watch配置。 通过vm.$watch进行监听。 看个具体的例子。 在new Vue()中传入watch配置。 <body> <div id="root"> <div>今天天气很{{info}}</div><br/> <button @click="

richest_qi的博客 9423

Vue中的计算属性和监听属性

Vue中的计算属性和监听属性 在项目中难免会遇到计算属性和监听属性,这两个都可以 监听数据的变化,但是又有些不同,在这里总结一下 1.computed计算属性 当需要监听一些数据需要随着其它数据变动而变动时,通常更好的做法是使用计算属性 <template> <div> <Form :model="info" label-position="right...

weixin_44552862的博客 2543

vue computed计算属性和watch监听事件

参考一: 1、计算属性适用的情形 我们可能会有这样的需求,一个数据属性在它所依赖的属性发生变化时,也要发生变化,这种情况下,我们最好使用计算属性。 例如在下面这个例子中,如果我们使用监听函数,代码就会变得有点冗余。 <div id="demo">{{ fullName }}</div> var vm = new Vue({ el: '#demo', dat...

前端技术的学习整理 5926

Vue的计算属性与监听属性

计算属性的getter和setter,计算属性的缓存,对象数据中的属性进行监听,deep选项

qq_46149597的博客 3570

Vue计算属性computed和监听属性watch的区别

我们希望一个变量是经过某种计算然后输出而不是直接输出的时候可以使用到计算属性,计算属性是基于它们的响应式依赖进行缓存的。只在相关响应式依赖发生改变时它们才会重新求值。而每次调用函数都会导致函数的重新执行。计算属性就是拿着Vue实例已有的属性计算或处理完后返回的一个全新的所以计算属性是一个属性,我们可以在插值语法中直接使用。

叶子yes的博客 3053

【Vue】Vue扫盲(三)计算属性和监听器

情况下, 过滤器都是有用的, 比如尽可能保持 API 响应的干净, 并在前端处理数据的格式。//由于这个过滤器写在单个的Vue实例中,所以叫做局部过滤器,我们还有全局过滤器一说。某些结果是基于页面上之前的数据实时计算出来的, 我们可以利用计算属性。//第一个参数:过滤器名字,第二个参数是函数体(真正的处理逻辑)watch 可以让我们监控一个值的变化。从而做出相应的反应。, 而只是改变渲染的结果, 并返回过滤后的版本。//watch可以让我们监控一个值的变化,从而做出反应。"西游记库存没有更多了"

qq_39666711的博客 1408

Vue监听和计算属性

Vue监听和计算属性 watch监听属性 这个属性用来监视某个数据的变化,并触发相应的回调函数执行。 基本用法添加watch属性,值为一个对象。对象的属性名就是要监视的数据,属性值为回调函数,每当这个属性名对应的值发生变化,就会触发该回调函数执行。 回调函数有2个参数: newVal,数据发生改变后的值。 oldVal,数据发生改变前的值。 计数器 <!DOCTYPE html> <html> <head> <meta charset="utf-8

小旺的博客 1552

vuejs计算属性computed & 监听属性watch

vuejs计算属性computed & 监听属性watch

letianxf的博客 4979
上一篇: Vue学习笔记(五)组件基础
下一篇: Vue学习笔记(七)路由
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值