当前位置:网站首页>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
即可边栏推荐
- 时域同步平均TSA学习笔记
- 简单的用户授权系统,利用给user表添加一个字段标识管理员的方式
- 【已解决】pnpm(Run “pnpm setup“ to create it automatically, or set the global-bin-dir setting, or the PNP
- Golang 汇编asm语言基础学习
- Matlab求解线性方程式与线性问题
- 做个男人,做个成熟的男人
- puzzle(005)单元拼接问题
- 请教下flink cdc mysql的同步数据延迟一般是多少,我这里写入es延迟有几秒~5分钟不等,
- retain和copy的区别 #import @class 的区别
- Time-series database selection and implementation practice for Xingsheng optimal monitoring scenarios
猜你喜欢
随机推荐
核糖核酸RNA的药物修饰方法
氧化钆包裹四氧化三铁Fe3O4磁性荧光纳米空心球|聚乙二醇二羧酸包覆四氧化三铁磁纳米颗粒(COOH-PEG-Fe3O4)
认识一下MRS里的“中间人”Alluxio
I would like to ask, this error is reported when the box is installed, but the database container can be used, what is the reason?1.02 and 1.0
Time-series database selection and implementation practice for Xingsheng optimal monitoring scenarios
葡聚糖偶联超顺磁性纳米Fe3O4造影剂|多肽偶联偶联超顺磁性纳米Fe3O4造影剂
【已解决】pnpm(Run “pnpm setup“ to create it automatically, or set the global-bin-dir setting, or the PNP
JVM内存模型分析(通俗易懂)
ERMiner: Sequential Rule Mining Using Equivalence Classes
LeetCode·每日一题·623.在二叉树中增加一行·递归·迭代
leetcode 729. My Calendar I(日程1)
eKuiper Newsletter 2022-07|v1.6.0:Flow 编排 + 更好用的 SQL,轻松表达业务逻辑
【OAuth2】九、资源服务器
OpenCV创建矩阵以及转为Eigen矩阵
SAP ABAP EXCEL 下载模板
如何编写有效的FAQ常见问题页面
工行里的数字员工是怎么来的?
全志V853芯片 在Tina下RISC-V核E907启动方式的选择
rk3399 /sys/class/gpio调试
PNA/RNA/DNA修饰方法研究进展








