watch的多样用法

338 阅读1分钟

前言

最近在项目里需要监听用户信息的输入,若全部输入则按钮可点击,按理说是个简单的需求,但我却踩了个坑,在信息变化时控制按钮是否可点击的属性却无法更新。例如用户信息如对象form

form{
  name:'',
  age:''
}
//在vue里,我对他的监听如下
watch:{
	form(){
  	//do something
  }
}

出的问题其实也很简单,就是只监听了form这个对象,而对象内部的变化难以被监听到。在回顾vue官方文档后,修改如下。

watch:{
	form:{
    handle(new,old){
  		//do something
  	},
    deep:true
  }
}

开启deep选项后,就可以监测内部的属性变化,从而触发回调。这次问题主要原因是对watch用法了解比较浅薄。于是借着这次机会回顾watch的各类选项。

回顾watch的各种写法

  1. 基础版
watch:{
	form:function demo(){
  	//do something
  }
}

基础版可以实现对大部分表达式进行监听,但如果是监听对象,无法监测其变化

  1. 对象部分属性监听版
watch:{
	form.name:function demo(){
  	//do something
  }
}

对象部分属性监听版可以使用来监听对象特定的属性时使用。

  1. 对象全部属性监听版
watch:{
	form:{
  	handle(){
    	//do something
    },
    deep:true
  }
}

对象全部属性监听版,适用于对象所有属性都需要监听时使用,但性能消耗也较大。

  1. 立即触发版
watch:{
	form:{
  	handle(){
    	//do something
    },
    immediate:true
  }
}

立即触发版将以目前值触发一次回调。

以上便是对watch一些用法的总结!