位置: IT常识 - 正文

Vue2 watch监听对象的属性值变化(vue的watch监听)

编辑:rootadmin
Vue2 watch监听对象的属性值变化 文章目录前言一、错误分析二、如何监听一个对象整体的改变?三、如何监听对象中一个属性值的改变?四、如何组织对象避免监听失败总结前言

推荐整理分享Vue2 watch监听对象的属性值变化(vue的watch监听),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue监听watch监听全局对象,vue的watch监听props,vue watch监听vuex数据,vue的watch监听,vue的watch监听,vuewatch监听data里的数据,vue watch监听耗费性能,vue2 watch监听对象,内容如对您有帮助,希望把文章链接给更多的朋友!

昨天拿到一个任务需要自己写组件, 然后就遇到这个问题了. 父组件中, 我需要在鼠标选中多选表格的一行时将这一行的数据对象传入子组件, 显然这不是个异步操作, 但是子组件那边怎么都拿不到值, 子组件需要在created周期调用一堆函数, 函数里面需要用到这个传过来的表格数据对象. 但是在函数里怎么数据对象输出都是undefined, 我大概对我的watch做了4-5次改进, 都没有解决这个事情, 起初以为是没有深度监听, 然后认为是需要深度监听里把新对象里的每个值遍历赋值出来存储. 最后病急乱投医了直接觉得是createed周期太早了而取不到.

一、错误分析

首先我不应该把新值重新赋值到props的this.rawParams…额是个低级错误, 这违背了Vue类似MVVM的通信原则. 其次我在父组件里组织这个对象的方式是使用obj.xxx = xxx的方式, 这就是改变对象值, 会加大监听难度, 不过这篇也是围绕这点来说的.

我两天有一个猜想, props传值的时候直接传个新的对象(就是直接把一个做好的对象赋值到要传的变量), 和使用obj.xxx的格式慢慢组织对象后传入, 这两种办法在被子组件监听时是否会有区别? 正好今天遇到这个情况, 顺手试一下, 我把两种情况各分一个章节来说.

二、如何监听一个对象整体的改变?Vue2 watch监听对象的属性值变化(vue的watch监听)

这就是我说的第一种情况, 直接组织好对象, 把整个新对象传入. 直接赋值一个新的对象更加易于监听到, 这就像直接赋值了一个String或者什么别的类型的变量:

<!-- 父组件内 --><ebec030i-res-display :rawParams="rawParams"></ebec030i-res-display>//父组件事件//你就想一个方法触发这玩意儿就好了, 不写了...rowClick(row) { let temParams = {} temParams.会计科目 = row.value1 temParams.往来单位 = row.value2 temParams.管理编号 = row.value3 temParams.余额 = row.value4 this.rawParams = temParams},

直接传新对象的话可以像监听一个简单数据类型一样去监听, 当然, 待会会说到监听对象内值变化的监听方法, 你也可以用那个监听这个…只要你愿意.

// 子组件监听watch: { watchRawParams: { handler: function(newVal, oldVal) { console.log(newVal) console.log(oldVal) }, deep: true, immediate: true, },},三、如何监听对象中一个属性值的改变?

相比直接赋值新的对象, 监听一个值的变化牵扯到深浅拷贝, 现在要监听this.rawParams. 出于性能的考虑, Vue天生不支持检测对象里属性值本身的变化(可以做, 但是性能消耗大, 成本与用户收益不成正比), watch监听单个属性值的变化也需要做一些特殊的配置.

rowClick(row) { this.rawParams.会计科目 = row.value1 this.rawParams.往来单位 = row.value2 this.rawParams.管理编号 = row.value3 this.rawParams.余额 = row.value4},computed: { watchRawParams: function() { let obj = {} Object.keys(this.rawParams).forEach((key) => { obj[key] = this.rawParams[key] }) return obj }},watch: { watchRawParams: { handler: function(newVal, oldVal) { console.log(newVal) console.log(oldVal) }, deep: true, immediate: true, },},

话说我以前干过这种蠢事, 我把监听到的新值又赋值给props里的值, 然后各种崩…这不符合MVVM的规范(其实根本成功不了). 所以现在有两种选择是在data上开一个新值来接收监听完的值, 或者用computed来接收. 修改对象或者数组, 也就是我说的第二种情况时, watch监听的新值和旧值都会指向同一个原数据, 也就是浅拷贝. 仅针对数组或者对象来说, 浅拷贝结果的子对象如果发生改变会导致源数据一同改变, 进而影响其它指针上的浅拷贝. 而第二种情况即是在浅拷贝情况下对对象子对象的改动, 会影响到源数据继而影响其他指针上的浅拷贝结果. 导致的后果就是watch监听到的新值和旧值是一样的, 判定为不需要进行值变动处理方案, 这种时候不会执行watch里你规定的值变化处理方案, 连里面的输出都不会执行.

所以如果是这种情况, 需要手动深拷贝一个完全一样的待监听对象出来还要让他们时刻保持相同, computed无疑更加合适, 缓存机制让它仅仅在发生变动时参与计算, 可以保证深拷贝出的待监听对象与原待监听对象完全相同又完全隔离互不影响. 原理是把第二种方式转换为第一种方式, 直接由computed返回一个全新的数组来避免使用浅拷贝监听.

四、如何组织对象避免监听失败

不需要监听对象属性值变化(或者能组织新数组)就直接赋值做好的新数组, 参考第二章, 很多时候并不需要监听属性值变化, 尽量避免. 不能避免的需要监听对象属性值变化, 参考第三章使用深拷贝法.

总结

被坑惨了…今下午修这个组件修了一个多小时啊啊啊… 希望这篇文章对你有帮助.

本文链接地址:https://www.jiuchutong.com/zhishi/289768.html 转载请保留说明!

上一篇:微信小程序之开发遇到 does not have a method “xxxx“ to handle event “tap“ 问题的解决方案【已解决】(微信小程序开挂方法)

下一篇:Nvidia Jetson TX2入门指南(白话版)(jetson nano nvidia-smi)

  • iphone13promax无线充电功率(iPhone13promax无线充电功率)

    iphone13promax无线充电功率(iPhone13promax无线充电功率)

  • 手机优酷会员账号共享二维码在哪(手机优酷会员账号如何共享二维码登录)

    手机优酷会员账号共享二维码在哪(手机优酷会员账号如何共享二维码登录)

  • 荣耀v20与华为mate20对比(荣耀v20与华为p30参数对比)

    荣耀v20与华为mate20对比(荣耀v20与华为p30参数对比)

  • pp视频有电视版么(pp视频电视版下载vip)

    pp视频有电视版么(pp视频电视版下载vip)

  • 功率1800w一小时耗电多少(额定功率1800w一小时用多少电)

    功率1800w一小时耗电多少(额定功率1800w一小时用多少电)

  • 淘宝拍下未付款多久取消(淘宝拍下未付款怎么取消订单)

    淘宝拍下未付款多久取消(淘宝拍下未付款怎么取消订单)

  • 拼多多sku是什么意思(拼多多sku是什么图)

    拼多多sku是什么意思(拼多多sku是什么图)

  • c4d和3dmax的区别(c4d对电脑配置要求)

    c4d和3dmax的区别(c4d对电脑配置要求)

  • 微信个人号引流的方法有哪些(微信个人号引流违法吗)

    微信个人号引流的方法有哪些(微信个人号引流违法吗)

  • 华为手机解除安全模式(华为手机解除安装未知应用)

    华为手机解除安全模式(华为手机解除安装未知应用)

  • mbr和guid哪个速度快(mbr快还是guid快)

    mbr和guid哪个速度快(mbr快还是guid快)

  • 快手每日打卡是什么意思(快手作品i显示每日打卡是什么意思)

    快手每日打卡是什么意思(快手作品i显示每日打卡是什么意思)

  • p40pro多重(p40pro有多重)

    p40pro多重(p40pro有多重)

  • 抖音可以取消别人对自己的关注吗(抖音取消别人点赞他那里会显示吗)

    抖音可以取消别人对自己的关注吗(抖音取消别人点赞他那里会显示吗)

  • 手机显示hd怎么关闭(手机显示HD怎么消除)

    手机显示hd怎么关闭(手机显示HD怎么消除)

  • 苹果11激活一直显示正在更新(苹果11激活一直显示各国您好)

    苹果11激活一直显示正在更新(苹果11激活一直显示各国您好)

  • 笔记本屏幕一直闪烁怎么办(笔记本屏幕一直闪烁是怎么回事)

    笔记本屏幕一直闪烁怎么办(笔记本屏幕一直闪烁是怎么回事)

  • 美图t9怎么强制关机(美图T9怎么强制重启)

    美图t9怎么强制关机(美图T9怎么强制重启)

  • 华为mate20x5G有没有屏幕指纹

    华为mate20x5G有没有屏幕指纹

  • 三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

    三星W20 5G手机屏幕多大(三星w2020手机屏多少钱)

  • mate30怎么调按键音(华为mate30怎样调出按键)

    mate30怎么调按键音(华为mate30怎样调出按键)

  • 淘宝一颗黄钻代表几颗心(淘宝一个黄钻等于几个蓝钻)

    淘宝一颗黄钻代表几颗心(淘宝一个黄钻等于几个蓝钻)

  • 小度怎么当监控摄像头(用小度怎么监控家里)

    小度怎么当监控摄像头(用小度怎么监控家里)

  • 微信怎么开启红包提醒功能(微信怎么开启红色感叹号)

    微信怎么开启红包提醒功能(微信怎么开启红色感叹号)

  • 图像分类方法总结(图像的分类方法及具体的分类)

    图像分类方法总结(图像的分类方法及具体的分类)

  • 房屋出租需要交税多少起征
  • 消费税组成计税价格怎么理解
  • 外购无形资产的摊销额计入什么费用
  • 不单独计价的包装物是什么意思
  • 母公司获得分红怎么做账
  • 没有认证的增值税专用发票怎么做账
  • 去年发生的成本怎么算
  • 转登记为小规模纳税人政策
  • 收到借户过账资金的短信
  • 补入库存商品的会计分录
  • 发票抵扣联做进项税入账处理是怎样的?
  • 有限合伙企业清算
  • 农民专业合作社普通发票抵扣
  • 少收的货款怎么入账
  • 园林工程的范围包括哪些?
  • 异常抵扣凭证进项税转出入哪个所属期
  • 票据结算包括哪几项
  • 个体工商户需要做账吗
  • 2020年餐饮行业免税政策
  • 出口布料有退税吗
  • 存商品入成原材料怎么改?
  • 免税收入和不征税收入有哪些?怎么记忆
  • 公司向股东还款的会计分录
  • 下载文件是php
  • PHP:imagetypes()的用法_GD库图像处理函数
  • 法罗群岛知乎
  • php数组可以使用哪些键名
  • 鬓角头发剃光了多久能长好
  • 外经交的个税如何计算
  • 计提的附加税
  • javaweb购物
  • 怎么才能学a1
  • 用友u8删除凭证的步骤
  • 帝国cms app
  • 如何办理出口退税备案
  • 开了红字信息表当月怎么做账
  • 无偿划转法律意见
  • 现金流量表直接法的优缺点
  • 财务报表中的净资产在哪里
  • 劳动合同和劳务合同可以一起签吗
  • 企业固定资产折旧可以按照其价值和使用情况
  • 代开发票含税价怎么核算为不含税发票?
  • 幼儿园固定资产说明怎么写
  • 固定资产盘亏盘盈
  • 暂估费用的会计分录
  • 出售金融资产计入
  • 车间购买劳保费用会计分录
  • 管理费用月底结转吗
  • 股权转让怎么入账
  • 应收账款客户少付款怎么记账
  • 固定资产清理如何计算
  • 水利建设基金筹集和使用管理办法
  • 建筑公司没有资质可以注册建造师吗
  • 在建工程转固规定
  • 单独计价作为固定资产入账的土地为什么不计提折旧
  • 教育行业的成本怎么做账
  • 退回备用金在现金怎么办
  • sql语句数量
  • mysql写错了怎么结束
  • bios开机密码怎么关闭
  • window10桌面有白色框
  • win7自带播放器怎么打开
  • win7系统换桌面
  • Windows XP中网桥设置方法
  • 怎么通过mac连接wifi
  • mac 8g 虚拟机
  • win10闹钟软件
  • 盗版xp黑屏的解决办法
  • windows7网络连接不可用怎么办
  • cocos creator js ts
  • python函数enumerate
  • nodejs 异步任务队列
  • 使用nodejs开发后端
  • jquery?
  • 四川医保网上怎么缴费支付宝
  • 2016年小微企业所得税标准
  • 外省车险保单,有何不利的事
  • 股权转让所得怎么计算个税
  • 信用社股金转让 办理要多少时间
  • 跨区域涉税事项报告表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设