vue的watch监听

vue的watch监听函数

watch用来响应数据的变化,watch 的用法大致有以下三种:

1. 监听某个变量

1 watch: { 2 name(newName, oldName) { 3 console.log(newName) // 改变前的值 4 console.log(oldName) // 改变后的值 5 } 6 }

2.也可以直接写一个监听处理函数,当每次监听到 name值发生改变时,执行函数。也可以在所监听的数据后面直接加字符串形式的方法名:

1watch:{ 2 name:'Namechange' 3}

immediate(立即处理,进入页面就触发)和handler

以上使用watch时有一个特点,就是当值第一次绑定的时候(即进入页面),不会执行监听函数,只有值发生改变才会执行。 如果我们需要再最初绑定值的时候也执行函数,需要用到immediate属性。 当父组件向子组件动态传值时,子组件props首次获取到父组件传来的默认值时,也需要执行函数,此时就需要将immediate设为true

1 new Vue({ 2 el: '#root', 3 data: { 4 name: '' 5 }, 6 watch: { 7 name: { 8    handler(newName, oldName) { 9    // ... 10    }, 11    immediate: true 12 } 13 } 14 })

监听的数据后面写成对象形式,包含handler方法和immediate,之前我们写的函数其实就是在写这个handler方法; immediate表示在watch中首次绑定的时候,是否执行handler,值为true则表示在watch中声明的时候,就立即执行handler方法,值为false,则和一般使用watch一样,在数据发生变化的时候才执行handler。

3.深度监听

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

1watch: { 2 name: { 3 handler(newName, oldName) { 4 // ... 5 }, 6 deep: true, 7 immediate: true 8 }

设置deep: true 则可以监听到city.name的变化,此时会给city的所有属性都加上这个监听器,当对象属性较多时,每个属性值的变化都会执行handler。

  • 如果只需要监听对象中的一个属性值,则可以做以下优化:使用字符串的形式监听对象属性
1watch: { 2 'city.name': { 3 handler(newName, oldName) { 4 // ... 5 }, 6 deep: true, 7 immediate: true 8 } 9 }

这样只会给对象的某个特定的属性加监听器。数组(一维、多维)的变化不需要通过深度监听,对象数组中对象的属性变化则需要deep深度监听。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )