本文小编为大家详细介绍“vue中怎么使用watch监听对象中某个属性”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中怎么使用watch监听对象中某个属性”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
immediate 和 handler
watch 的用法有个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值得时候也执行函数,就需要用到 immediate 属性。
'currentParams.selOrgId': { handler(newV, oldV) { console.log("watch", newV, oldV) }, immediate: true }
deep 深度监听
当需要监听复杂的数据类型(对象)的改变时,普通的 watch 方法无法坚挺到对象内部属性的改变,此时就需要使用 deep 属性对对象进行深度监听。
currentParams: { handler (newV, oldV) { console.log('watch深度监听:', newV, oldV); }, deep: true }
watch深度监听 ,可以监听到对象中每个属性的变化,但是会给对象的所有属性都加上这个监听器,当对象属性较多时,每个属性值得变化都会执行 handler 。
以currentParams为例,监听selOrgId属性
data(){ return { currentParams: { selOrgId: '1' }, } }
1.通过input输入框触发watch
<input v-model="currentParams.selOrgId" /> data(){ return { currentParams: { selOrgId: '1',//声明不声明都可以触发watch }, } }, watch: { 'currentParams.selOrgId': (newV, oldV) => { console.log("watch", newV, oldV) }, },
2.通过js动态修改对象中属性值触发watch
data(){ return { currentParams: { }, } }, watch: { 'currentParams.selOrgId': (newV, oldV) => { console.log("watch", newV, oldV) }, }, methods: { triggerWatch () { 方法一、要监听的属性值(currentParams.selOrgId)不需要事先声明 this.currentParams=Object.assign({}, this.currentParams, {selOrgId: "改变后的值"}); 方法二、要监听的属性值(currentParams.selOrgId)不需要事先声明 this.$set(this.currentParams,'selOrgId',"改变后的值") 方法三、要监听的属性值(currentParams.selOrgId)需要事先声明,否则监听不到 this.currentParams.selOrgId = "改变后的值"; } }