vue动态监听计算对象中的属性

Vue.js计算属性和监听属性 开发人员可以在模板中像绑定普通属性一样绑定计算属性,计算属性自动监听依赖值的变化,当其依赖属性的值发生变化时,计算属性的值会自动更新,与之相关的DOM部分也会同步更新。每个计算属性都包含一个getter和setter,上面的例子都是计算属性默认用法,只是利用了getter来读取,在开发人员需要时,也可以提供一个。来读取一个计算属性,在业务中很少使用到setter,所以在声明一个计算属性的时候,可以直接使用默认的写法,不必将getter和setter都声明。在Vue.js框架中,所有计算属性都以。 阅读详情

web开发过程中,经常遇到要自动计算的问题,比如输入几个金额,自动计算出总和,或者计算出折扣什么的。还有更复杂的,动态添加删除数组,数组中每个对象都有自动计算的小计,数组外还有总和的计算,那就需要用到computed和watch了。

先来名词解释一下吧!

computed是计算属性,注意是属性,和data属性都是变量,不能重名,用法和data相同。计算属性函数内变量变化,会自动重新计算结果返回。计算属性是基于它们的依赖项的值结果进行缓存的,只要依赖的变量不变, 都直接从缓存取结果。

watch是侦听器,与data中的属性同名,当属性的值发生改变的时候,侦听器被触发执行。一个侦听器对应data中的一个属性,当属性发生变化时触发侦听器的执行。

两者的区别:

1)computed适合用于计算依赖多个属性的情况;watch适合用于计算依赖一个属性的情况

2)computed有return;watch没有

3)watch中有属性变化后的val参数,computed没有参数

4)computed函数内部数据没有变化则直接从缓存中取结果,但数据变化则重新计算,每次计算需要重新创建变量缓存结果;watch则是监听到变化直接计算,不需要创建变量保存结果。所以对于数据多次变化,需要多次计算的情况,computed的开销会更大,更适合使用watch;而数据多次被使用,但其依赖变化较少,获取数据直接从缓存中取,则更适合computed

好了,该说正事了!需求是这样的,新增表单中ruleForm中多个属性,其中一个是可以动态增加和删除的数组ruleForm.specList,数组中装的是对象,如下图。标准价格是是前面选择带出来的数值,数量和销售单价是输入的数值,小计和折扣则是根据前面的数字自动计算出来的。小计=销售单价*数量,折扣=销售价格/标准价格*100。

 然后,这个ruleFrom还有另一个属性,ruleForm.productTotal,如下图,产品合计也是需要自动计算的,是specList中所有小计的和。

 

 其实就是监听ruleForm.specList的数据变化,然后计算结果,更新数据。这里首先不能直接用computed,因为ruleForm是data中的属性,已经不能用在computed中了。也不能直接用watch,因为watch,因为我们是想要监听到ruleForm.specList的数据变化才对数据进行计算。这种情况就可以利用computed做中间层,在computed中定义属性ruleFormSpecList,返回ruleForm.specList,然后在watch中监听ruleFormSpecList,具体代码如下

  computed: {
    ruleFormSpecList(){
      return this.ruleForm.specList
    },
  },
  watch: {
    ruleFormSpecList:{
      handler(){
        let pTotal = Number(0);
        this.ruleForm.specList.forEach(item=>{
          //计算小计
          if (item.sellPrice && item.sellNum){
            this.$set(item, "sellTotal", Number(item.sellPrice * item.sellNum))
          }
          //计算折扣
          if (item.sellPrice && item.basicPrice){
            this.$set(item, "discount", Number((item.sellPrice / item.basicPrice * 100).toFixed(2)))
          }
          //计算产品合计
          if (item.sellTotal){
            pTotal+=Number(item.sellTotal)
          }
        })
        //赋值产品合计
        if (pTotal > 0){
          this.ruleForm.productTotal = pTotal
        }
      },
      //因为要监听对象内部的属性,所以要用deep:true
      deep: true
    }
  },

推荐参考:Vue对象属性值发生变化的监听三种方法_Tand.的博客-优快云博客_vue监听对象属性值变化

Vue--》计算属性与监视(侦听)属性的使用 1)Vue中的watch默认不监测对象内部值的改变(一层)2)配置deep:true可以监测对象内部值改变(多层)3)Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以4)使用watch时根据数据的具体结构,决定是否采用深度监视。 阅读详情

相关推荐

Vue.js中的对象侦听属性

它提供了一种简单而强大的方式来处理数据的变化,并且可以通过侦听属性来监控对象的变化。在本文中,我们将详细介绍Vue.js中的对象侦听属性,并提供相应的源代码示例。在实际开发中,对象侦听属性是非常有用的工具,可以帮助我们构建高效和可靠的Vue.js应用程序。在实际开发中,对象侦听属性非常有用,特别是当我们需要在属性值发生变化时执行一些特定的操作时。方法外,Vue.js还提供了其他一些方法来处理对象的侦听属性,如。属性的值发生变化时,回调函数将被触发,并输出变化前后的值。方法来侦听对象的属性变化。

2301_79331387的博客 328

Vue对象属性值发生变化的监听三种方法

监听info对象中的a属性值变化: <script> const vm = Vue({ data() { return { b: true, info:{ a: 1, b:2, c: 3 } } } </srcipt> 第一种方式:使用deep 为了发现对象内部值的变化,可以在选项参数中指定 deep: true。

weixin_45847735的博客 4万+

Vue中获取对象的第几个属性

有时候,我们可能需要根据索引来获取对象中的属性,特别是当对象的属性是动态生成的或者需要根据用户输入进行选择时。要根据索引选择对象的属性,我们可以使用计算属性。计算属性是根据响应式数据进行动态计算的属性。我们可以在计算属性中编写逻辑来获取指定索引的属性。通过使用计算属性和监听器,我们可以轻松地根据索引从对象中选择属性,并将其显示在Vue模板中。假设我们有一个包含多个属性的对象,我们想要根据索引获取其中的属性值。的变化,并在变化时触发计算属性的重新计算。计算属性会相应地重新计算,并将选择的属性值更新到模板中。

ByteNinja的博客 1181

前端Vue篇之vue如何监听对象或者数组某个属性的变化

在 Vue 中,你可以使用 watch 或者 computed 来监听对象或数组某个属性的变化。但是,如果直接设置数组的某一项的值,或者直接设置对象的某个属性值,这个时候,你会发现页面并没有更新。这是因为 Object.defineProperty() 限制,监听不到变化。

星辰迷上大海的博客 1万+

【前端框架开发 | Vue.js | 第六篇】Vue.js计算属性、监听属性及样式绑定

Vue中属性与样式绑定在开发中的作用不可或缺。例如实现单位的换算、监听和响应数据的变化及输入事件等,本文将基于实例进行以上知识点的讲解。Vue.js计算属性是一种便捷的声明式方式来定义一个与模板数据绑定相关联的属性。它们可以用于处理和转换数据,并且只有在其依赖的数据发生改变时才会重新求值。

等风来 7894

AutoSAR实战:手把手教你配置PNC(Partial Network Cluster)实现精准休眠与唤醒

本文详细介绍了如何在AutoSAR中配置PNC(Partial Network Cluster)实现精准休眠与唤醒,通过DaVinci Configurator工具逐步指导,结合ComM模块的协同调试,优化车载电子系统的能耗管理。文章包含实战步骤、常见错误排查及功耗优化数据,适合汽车电子开发工程师参考。

weixin_33725239的博客 466

Vue父组件向子组件传递一个动态的值,子组件如何保持实时更新实时更新?

最近用vue做一个新项目,经历了各种折磨,每次遇到问题都想大喊,格劳资上JQuery,氮素肯定是不行的,今天遇到一个小问题,Vue父组件向子组件传递一个动态的值,子组件只能获取初始值,不能实时更新? 这就有点折磨人了,设想的是,父组件发生变化获取数据,动态传递给子组件,子组件实时刷新视图。vue视图是数据驱动的嘛,这设想就是完美而合理的了吧。可就是不行!!!! 请教前辈,支个招让用vuex...

weixin_30292843的博客 532

PyCharm+QT Designer整合

CMD下使用pip安装PyQt4或者PYQT5 这里要注意,你下载的PYQT5不包含QT designer 还要:pip3 install PyQt5-tools,好像Pyqt5中将designer分离了或者查看源码:https://github.com/altendky/pyqt5-tools,编译安装 将QT Designer整合到PyCharm的External Tools中,以后就可...

mxh的博客 6414

计算属性 + Vue2 、Vue3 wacth + 过滤器

我热爱 vue.js , ElementUI , Element Plus 相关技术栈,我的目标是给大家分享最实用、最有用的知识点,希望大家都可以早早下班,并可以飞速完成工作,淡定摸鱼????。 你可以在csdn关注我:活在风浪里,也可以在快手里找到我:张坤【视频达人】。 希望大家在 2022 变得更强。 ...

技术前端,忠于热爱 @0.活在风浪里 1244

你的OLED屏和MPU6050为啥通信失败?从IIC的7位地址冲突讲起

本文深入解析OLED屏与MPU6050传感器在I2C总线上的通信故障,重点探讨7位地址冲突问题。通过分析I2C协议中的地址分配机制,提供硬件调整和软件调试的完整解决方案,帮助开发者有效排查和解决设备无响应问题。

weixin_26876073的博客 151

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 292

关于Vue的一些小笔记(三)计算、监听、样式绑定

前言:这个笔记主要内容为vue的计算属性、监听属性和样式绑定。让我们一起来看看吧! 一、Vue的计算属性 关键词:computed。 用来处理一些复杂的逻辑,类似于在computed里面建立一个函数或方法。 (1)一个例子 假如需要反转一个字符串,我们会这么做: <div id="app"> {{message.split('').reverse().join('')}} </div> 但是如果我们要在多处反转字符串,这样写反而麻烦,不利于多次调用,也不容易看懂理解。 .

sandy_star 1690

保姆级教程:用Python 3.10和Ollama在Windows上搞定LightRAG本地部署(附环境配置避坑指南)

本文提供了一份详细的Windows系统下LightRAG本地部署指南,涵盖Python 3.10环境配置、Ollama模型服务安装到LightRAG核心组件部署的全流程。特别针对Windows平台常见问题提供解决方案,帮助开发者快速搭建高效的检索增强生成(RAG)系统,实现专业领域知识的智能检索与整合。

weixin_28725407的博客 489

Vue学习计划-Vue2--Vue核心(四)watch监听属性、动态绑定class、style,set方法的使用

Vue学习计划-Vue2--Vue核心(四)watch监听属性、动态绑定class、style,set方法的使用

把代码调成柠檬味 2256

基于Cesium的北斗卫星轨道实时可视化系统开发实践

本文详细介绍了基于Cesium的北斗卫星轨道实时可视化系统开发实践,涵盖系统架构设计、轨道计算实现、后端服务开发及前端可视化实现等关键环节。通过优化算法和数据流设计,系统实现了厘米级精度的卫星轨道实时渲染,适用于导航卫星系统的科研与工程应用。

j7k8l的博客 520

SAP CO模块实战:成本中心会计分割结构配置全流程(OKES事务码详解)

本文详细解析了SAP CO模块中成本中心会计分割结构的配置全流程,重点讲解了OKES事务码的实战操作。内容涵盖分割结构的概念理解、配置前的次级成本要素与作业类型主数据准备,并通过步骤拆解演示了如何定义分割结构、规则与版本,以及如何将配置关联到成本中心并执行分割。最后提供了常见问题排查与优化建议,旨在帮助顾问及财务人员掌握成本精确分摊的关键配置,确保期末成本核算的准确性。

embedding5hiker的博客 805

vue watch 对象_Vue 的 computed 和 watch 的区别

computer 计算属性通过计算得出的属性就是计算属性计算属性可以是一个函数或者是一个getter和setter组成的对象看看一个展示名字的实例:需求一:展示名字// 引用完整版 Vue,方便讲解import Vue from "vue/dist/vue.js";new Vue({ data: { firstName: 'Jacky', lastName: 'Lee' ...

weixin_42099814的博客 160

AI问数,智慧赋能:基于大语言模型的数据播报员应用实践探索

AI问数技术正在改变企业与数据交互的方式,它以自然语言为桥梁,让数据不再是少数专家的专利,而是成为所有业务人员的决策伙伴。这不仅是技术的创新,更是管理理念的革新。在数字化转型的关键阶段,企业应积极拥抱AI问数技术,通过降低数据使用门槛、提升数据利用效率、释放数据潜在价值,实现真正的数据驱动决策,为企业的高质量发展注入源源不断的智慧动能。AI问数,正在开启一个数据普惠的新时代。

getusushu的博客 64

Vue.js进阶:计算属性与监听、类与样式绑定

在Vue.js中,除了基础的指令和组件之外,还有许多高级特性可以帮助我们构建更加灵活和高效的应用。本文将介绍Vue.js中的计算属性与监听、类与样式绑定这两个高级特性。

KAIYUANHEMIAO的博客 465

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Vue——计算属性、属性监听器、过滤器

Vue——计算属性、属性监听器、过滤器

qq_52499745的博客 462

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

is属性用法 vue_Vue.js 新手入门:遍历、判断、属性绑定、计算属性和事件监听

Vue 是一套用于构建用户界面的渐进式JavaScript框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,方便与第三方库或既有项目整合。另一方面,Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用。一、创建Vue对象在编写Vusjs代码过程中,会首先创建一个Vue对象。const app = new Vue({el: "...

weixin_35715190的博客 538

动态class、动态style、计算属性、过滤器filters、监听器watch、深度监听

动态class 目标 用v-bind给标签class设置动态的值 语法 ● 格式1:<标签 :class="变量" /> ● 格式2:<标签 :class="{类名1: 布尔值, 类名2: 布尔值}" /> ○ 如果布尔值为true,就添加对应的类名 说明:可以和静态class共存 <style> #app{width:500px;margin:50px auto;border:3px solid red;} .box{

weixin_65100963的博客 1943

Vue-style,class绑定,以及动画

Vue-style,class绑定,以及动画vue的参数对象Vue指令加深Vue 操作dom---`$refs``class`的绑定`style`绑定Vue中的动画transfrom动画关键帧动画动画模式动画组动画 vue的参数对象 el vue的作用域(模板指定) template data vue的定义初始数据 methods vue的事件方法中心 computed vue的计算属性,从现有属性计算新的数据 watch vue监听,如果监听对象,必须有deep : true 声明周期钩子函数 创建阶

莫莫 2692

《风尚坐火箭学习vue》-- 第十章:Vue中的监听watch用法及商品总价实例

Vue中的监听watch用法及商品总价实例

你不追逐时代,时代就会反噬你,我是风尚,一个有趣的灵魂 708

计算属性 监听属性的模糊查询

【代码】计算属性 监听属性的模糊查询。

m0_73734137的博客 349
上一篇: 一个Activity多个Fragment实现多步骤创建功能
下一篇: vue中的带参数的方法如何传递其他参数
Ryfall
博客等级 码龄15年 30粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值