vue watch的使用

<template>
  <div>
    <input type="text" v-model="text">
  </div>
</template>
<script>
export default {
  data () {
    return {
      text: '',
	  obj: {
		inObj: ''
	  }
    }
  },
  watch: {
    text (val) {
      alert(val)
    }
  }
}
</script>
<style lang="less" scoped>
</style>

watch  两种写法
    sample (newValue) {}
    sample2 (newValue, oldValue) {}
    
代码初次加载编译时,watch会与被监听的属性进行监听绑定,
只有当watch监听属性发生变化时,才会触发监听属性对应的的方法,
上例中即指的是sample对应的方法体
如果需要在watch绑定属性时及触发对应方法,需要将触发设置和执行方法分开
触发设置: immediate
           immediate:true代表如果在 wacth 里声明了 sample 之后,就会立即先去执行里面的handler方法,
           如果为 false就跟我们以前的效果一样,不会在绑定的时候就执行。
方法体:   handler
           给sample绑定了一个handler方法,之前写的 watch 方法其实默认写的就是这个handler,
           Vue.js会去处理这个逻辑,最终编译出来其实就是这个handler。

watch: {
		sample: {
			handler (newValue, oldValue) {},
			immediate: true
		}
	}

如上设置即可。

watch 里面还有一个属性 deep,默认值是 false,代表是否深度监听

Vue 不能检测到对象属性的添加或删除。
由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,
所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。

默认情况下 handler 只监听obj这个属性它的引用的变化,只有给obj赋值的时候它才会监听到.
如果需要监听obj对象的属性inObj的变换,就可以通过设置deep为true达到目的。
 

   watch: {
        sample: {
            handler (newValue, oldValue) {},
            immediate: true,
            deep: true
        }
    }


这样Vue.js才会一层一层解析下去,直到遇到属性inObj,然后才给inObj设置监听函数


注销watch
当页面的路由跳转后,其实原watch就没用了,这时应该注销掉原来页面的 watch 的,不然的话可能会导致内置溢出。
写在组件间的watch会随着页面的销毁而销毁,但如果watch被作为对象创建时,就需要手动销毁了。
 

const unWatch = app.$watch('text', (newVal, oldVal) => {
  console.log(`${newVal} : ${oldVal}`);
})
unWatch(); // 手动注销watch

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值