Vue.js中 watch 用法详解(立即执行,深度监听)

watch

vue中,使用watch来响应数据的变化。并调用因为变化需要执行的方法。可以通过watch动态改变关联的状态

使用

1.常用方法
<template>
    <div>
        <p>name: {{name}}</p>
        <p>name: <input type="text" v-model="name"></p>
    </div>
</template>
<script>
    export default {
        name: 'index',
        data(){
            return{
               name:'abc'
            }
        },
        //直接写一个监听处理函数,当每次监听到 name 值发生改变时,执行函数。
        watch: {
           name(newVal,oldVal){//普通的watch监听
		         console.log(newVal,oldVall);
		    },
        }
    }
</script>
2 .立即执行(immediate和handler)

第一种用法watch有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。如果我们需要在最初绑定值的时候也执行函数,则就需要用到immediate属性。

<template>
    <div>
        <p>name: {{name}}</p>
        <p>name: <input type="text" v-model="name"></p>
    </div>
</template>
<script>
    export default {
        name: 'index',
        data(){
            return{
               name:'abc'
            }
        },
        //直接写一个监听处理函数,当每次监听到 name 值发生改变时,执行函数。
        watch: {
          name: {
		      handler(newVal,oldVal) {
		      
		      },
	      	immediate: true
	   		 }
        }
    }
</script>

== 监听的数据后面写成对象形式,包含handler方法和immediate,之前写的函数其实就是在写这个handler方法。==

immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler

3.深度监听(deep)

当需要监听复杂数据类型(对象)的改变时,普通的watch方法无法监听到对象内部属性的改变,只有data中的数据才能够监听到变化,此时就需要deep属性对对象进行深度监听

<template>
    <div>
        <p>name: {{person.name}}</p>
        <p>name: <input type="text" v-model="person.name"></p>
    </div>
</template>
<script>
    export default {
        name: 'index',
        data(){
            return{
              person:{
              	name:'abc',
              	job:'game'
              }
            }
        },
        //直接写一个监听处理函数,当每次监听到 name 值发生改变时,执行函数。
        watch: {
          person: {
		      handler(newVal,oldVal) {
		      		
		      },
      		immediate: true,
      		deep:true
	   		 }
        }
    }
</script>

设置deep: true 则可以监听到person.name的变化,此时会给person的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性:

watch: {
    'person.name': {
      handler(newVal,oldVal) {
      // ...
      },
      deep: true,
      immediate: true
    }
  }
  • 12
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vuewatch属性是用来监听数据的变化并执行相应的操作。在Vue,我们可以通过watch深度监听数组的变化。 使用深度监听数组的方法如下: ``` watch: { 'myArray': { handler: function(newVal, oldVal) { // 数组发生变化时的操作 }, deep: true } } ``` 其,`myArray`是要监听的数组名。通过设置`deep`为`true`,可以实现对数组内部元素的变化进行监听。当数组的元素发生增加、删除、替换等操作时,handler函数会被触发。 例如,如果我们有一个数组`myArray`,当该数组的元素发生变化时,我们可以在handler函数执行相应的操作。比如,在数组新增一个元素,可以在handler函数打印出新增的元素: ``` watch: { 'myArray': { handler: function(newVal, oldVal) { console.log('新增元素:', newVal[newVal.length-1]); }, deep: true } } ``` 引用介绍了Vuewatch属性以及深度监听的方法,引用给出了一个示例,展示了当数组元素发生改变时的效果。通过设置watch的deep属性为true,可以实现对数组的深度监听。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue watch普通监听深度监听实例详解(数组和对象)](https://download.csdn.net/download/weixin_38689041/12953951)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [VUE使用WATCH监听数组或对象的总结](https://blog.csdn.net/weixin_39645308/article/details/111783275)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue整合SSM项目实战](https://download.csdn.net/download/m0_55755339/88241603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值