白云岛资源网 Design By www.pvray.com

使用过watch的,应该起码经历过一次失效。

比如,我们监听对象的时候,在没有踩坑之前,很容易这样写:

vue.js watch经常失效的场景与解决方案

但是,"htmlcode">

let obj = { a: 1 };
let obj1 = obj;
let obj2 = { ...obj };
obj1.a = 2;
obj2.a = 3;
// 这里肯定是true,因为obj和obj1都是同一个指针,不明白的搜下引用类型
console.log(obj1 === obj);
// 这里肯定是false,因为指针不同
console.log(obj2 === obj);

怎么解决呢?也简单!

设置deep:true,这样obj中的属性发生变化(可被监测到的),便会执行 handler 函数;。

vue.js watch经常失效的场景与解决方案

!!!注意,因为是引用类型,所以newValue 和oldValue始终相等,千万不要犯傻的写相等就return,那就永远也不往下走了。。。。

监测数组

引用类型,除了对象,很容易想到数组,那数组是不是也需要这样写呢。
话分两头:

  • 数组项是对象类型,就需要deep
  • 数组项是值类型,就不需要deep

因为vue2里,数组被特殊处理了,跟 obj 不等同,所以需要分情况。

也就是数组项是值类型的话,直接这么写就行:

vue.js watch经常失效的场景与解决方案

对象类型的话,上面是不行的,先举个错误 "text-align: center">vue.js watch经常失效的场景与解决方案

不打印的原理,依然是数组项是对象类型,想watch对象类型,必须加deep

正确做法 "htmlcode">

watch:{
 arr: {
 handler(newValue) {
  // 这里就可以打印了
  console.log(newValue);
 },
 deep: true
 },
}

总结

watch失效的场景:

  • 对象类型
  • 数组项为对象类型的数组

解决方案:加deep:true。

watch的其他属性

官网文档

  • 一开始就需要执行watch的话,可 immediate属性
  • handle可以是一个数组
  • 取消watch的话,this.$unwatch
  • watch对象的某个属性的话,'obj.key'(){}
  • 如果想同时检测两个属性,懒得一个个写的话,有个偷懒的法子用computed做中间层。
computed:{
 fullName(){return this.firstName + this.lastName}
},
watch:{
 fullName(){...}
}

引用

watch的用法

总结

白云岛资源网 Design By www.pvray.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
白云岛资源网 Design By www.pvray.com

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。