当前位置:网站首页>Watch监听器的使用
Watch监听器的使用
2022-08-05 18:03:00 【这次我一定要赢】
一.简单数据类型
代码:
<template>
<div>
<div class="">
{
{ name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
name: '张三'
}
},
watch: {
name(newVal, oldVal) {
console.log(newVal, '新值')
console.log(oldVal, '旧值')
}
},
methods: {
fn() {
this.name = 123
}
}
}
// watch窃听器
</script>
<style scoped>
</style>

二.监听复杂数据类型
<template>
<div>
<div class="">
{
{ obj.name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
obj: {
name: '张三'
}
}
},
watch: {
obj: {
// deep: true,
handler(newval, oldval) {
console.log(newval, '新值')
console.log(oldval, '旧值')
}
}
},
methods: {
fn() {
this.obj.name = 123
}
}
}
// watch窃听器
</script>
<style scoped>
</style>

有人会说需要开启深度监听
<template>
<div>
<div class="">
{
{ obj.name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
obj: {
name: '张三'
}
}
},
watch: {
obj: {
deep: true,
handler(newval, oldval) {
console.log(newval, '新值')
console.log(oldval, '旧值')
}
}
},
methods: {
fn() {
this.obj.name = 123
}
}
}
// watch窃听器
</script>
<style scoped>
</style>

确实开启深度监听可以监听到。
但是不开启就监听不到了吗?
答案,非也
看下面的代码:
<template>
<div>
<div class="">
{
{ obj.name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
obj: {
name: '张三'
}
}
},
watch: {
obj: {
handler(newval, oldval) {
console.log(newval, '新值')
console.log(oldval, '旧值')
}
}
},
methods: {
fn() {
this.obj = {
age: 20
}
}
}
}
// watch窃听器
</script>
<style scoped>
</style>
视图:

可以看出不开启深度监听也是可以监听到的。
为什么一直能监听一种不能监听呢?


通过改变的情况进行对比可以发现,第二种改变直接重新赋值了一个对象也就是改变了地址。


用0001 表示他的栈 当赋值一个新的对象的时候,生成一个新的堆 栈也会生成一个新的。
因此:我们得出一个结论,watch默认监听的是栈的变化。开启deep:true 深度监听,栈的变化和堆的变化都可以监听到。
这就是我们在检查一个普通的数据类型的时候为什么能够轻易监听的原因。
<template>
<div>
<div class="">
{
{ name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
name: '张三'
}
},
watch: {
name(newVal, oldVal) {
console.log(newVal, '新值')
console.log(oldVal, '旧值')
}
},
methods: {
fn() {
this.name = 123
}
}
}
// watch窃听器
</script>
<style scoped>
</style>
用示意图来表示:

三.只有当值改变的时候才去监听吗?
immediate: true
立即实现监听
<template>
<div>
<div class="">
{
{ obj.name }}
</div>
<button @click="fn"> 点击 </button>
</div>
</template>
<script>
export default {
name: '',
data() {
return {
obj: {
name: '张三'
}
}
},
watch: {
obj: {
immediate: true,
handler(newval, oldval) {
console.log(newval, '新值')
console.log(oldval, '旧值')
}
}
},
methods: {
fn() {
this.obj = {
age: 20
}
}
}
}
// watch窃听器
</script>
<style scoped>
</style>

四.总结
在监听复杂数据的时候开启
depp:true
即可边栏推荐
- What are the elements related to the form
- 倪光南:openEuler已达国际同类社区水准
- Kubernetes 服务发现
- 学 Go,最常用的技能是什么?打日志
- 氨基修饰四氧化三铁纳米粒子Fe3O4-NH2|四氧化三铁纳米粒子表面修饰聚酰胺胺型树枝高分子(PAMAM)
- Kubernetes 平面组件 etcd
- 【访谈】Eotalk Vol.02:从极客到 CEO,开发者应该如何提升技术领导力?
- 包载信使RNA(mRNA)的虫草多糖脂质体|冬虫夏草多糖脂质体包载小干扰RNA(siRNA)
- 浓情七夕,有礼相送!
- 解决升级Chrome浏览器之后出现跨域错误:Access to xxx has been blocked by CORS policy: XXXX
猜你喜欢
随机推荐
基于ABP和Magicodes实现Excel导出操作
【软考 系统架构设计师】软件架构设计④ 基于架构的软件开发方法
JWT漏洞详解
【OAuth2】十、BearerTokenAuthenticationFilter过滤器介绍
从零开始Blazor Server(8)--增加菜单以及调整位置
Meet Alluxio, the "middleman" in MRS
如何成为一名合格的 DBA?看看“老油条”们怎么说
Can the code signing certificate solve the software being alerted by antivirus software?
通过软链接mklink共享node_modules
3、常用标签和样式
LeetCode·每日一题·623.在二叉树中增加一行·递归·迭代
柔红霉素长循环脂质体包载信使RNA(mRNA)|负载RNA的羟基喜树碱包衣纳米脂质体(脂质体核酸供应)
Centos系统安装MySQL数据库
一般来说,农产品期货哪个品种波动最大
Golang 汇编asm语言基础学习
canvas实现多个图片合成js特效
如何编写有效的FAQ常见问题页面
C语言的文件操作
每日的盐 C#生成imei校验位
js文字开场百叶窗js特效









