深入理解vue.js中$watch的oldvalue与newValue

yizhihongxing

深入理解vue.js中$watch的oldValue与newValue

Vue.js中,$watch是一个非常核心的API,经常用来监听数据的变化。$watch的主要用法如下:

watch: {
  'data.field'(newVal, oldVal) {
    // 当 data.field 发生变化时触发该回调函数,newVal 表示变化后的值,oldVal表示变化前的值。
  }
}

在$watch的回调函数中,我们可以拿到newValue和oldValue。但是,何时才会触发oldValue呢?我们可以通过下面的例子来详细讲解:

示例1

<template>
  <div>
    <input type="text" v-model="message">
    <p>当前文本框内容:{{ message }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  watch: {
    message(newVal, oldVal) {
      console.log('new:', newVal);
      console.log('old:', oldVal);
    }
  }
}
</script>

在上面的代码中,我们监听了一个文本框的变化。当文本框的值发生变化时,$watch会触发回调函数,并且我们可以拿到newValue和oldValue。此时oldValue表示变化前的文本框的值。

示例2

在Vue.js中,对象的变化只有在属性被替换的情况下才能被监听。但Vue.js提供了Object.defineProperty()API给我们手动设置它的getter和setter,从而能够监听对象的变化。下面是一个示例:

<template>
  <div>
    <p>姓名:{{ person.name }}</p>
    <p>年龄:{{ person.age }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      person: {
        name: 'jack',
        age: 20
      }
    }
  },
  created() {
    Object.defineProperty(this.person, 'age', {
      get: function() {
        console.log('get age');
        return this._age
      },
      set: function(newVal) {
        console.log('set age');
        this._age = newVal
      }
    })
  },
  watch: {
    'person.age'(newVal, oldVal) {
      console.log('new:', newVal);
      console.log('old:', oldVal);
    }
  }
}
</script>

在上面的代码中,我们手动设置了person对象的age属性的getter和setter。当我们修改person对象的age属性时,$watch回调函数会被触发,并且我们可以获取到newValue和oldValue,此时oldValue表示person.age属性的变化前的值。

总结

$watch是Vue.js中非常重要的一个API,它可以帮助我们监听数据变化,从而实现复杂业务逻辑的实现。在$watch的回调函数中,我们可以获取到newValue和oldValue,而oldValue表示数据变化前的值,可以用来进行后续业务逻辑的处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解vue.js中$watch的oldvalue与newValue - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue的事件绑定与方法详解

    下面是关于“vue的事件绑定与方法详解”的完整攻略。 什么是Vue事件绑定? 在Vue应用程序中,事件绑定用于监听DOM元素上的事件,以响应用户的交互操作。当用户对指定的DOM元素进行操作时,Vue会自动检测DOM事件,并触发指定的Vue方法。 事件绑定语法: <button v-on:click="doSomething">…

    Vue 2023年5月28日
    00
  • vue-cli项目配置多环境的详细操作过程

    为了让大家更好地理解“vue-cli项目配置多环境”的操作过程,下面就给出一份详细的攻略。本攻略会分为以下几个部分: 什么是多环境配置 实现多环境配置的步骤 示例说明 常见问题解答 什么是多环境配置 多环境配置是指,在项目开发中,我们需要针对不同的环境(如开发、测试、生产环境)使用不同的配置参数,如不同的API地址、不同的静态资源路径等。在vue-cli项目…

    Vue 2023年5月28日
    00
  • 一步步从Vue3.x源码上理解ref和reactive的区别

    当我们在使用Vue3.x的时候,ref和reactive这两个API很常用,但是也经常容易搞混。这篇攻略将介绍ref和 reactive的区别,并且通过源码分析来更加深刻理解这两者之间的差异。 1. reactive reactive是用于将对象转为响应式的API。我们一般使用这个API来将普通的对象转成可以响应式地监听的对象。使用方法如下所示: impor…

    Vue 2023年5月28日
    00
  • Vuejs如何通过Axios请求数据

    接下来我会为你详细讲解Vue.js如何通过Axios请求数据的完整攻略,并提供两个示例以加深理解。 使用Axios在Vue.js中请求数据的步骤 要使用Axios在Vue.js中请求数据,需要按照以下步骤进行: 步骤1: 安装Axios 使用Axios前,需要先安装它。在终端中运行以下命令便可以安装Axios: npm install axios –sav…

    Vue 2023年5月28日
    00
  • nodejs 生成和导出 word的实例代码

    生成和导出word文件是我们在进行实际开发中比较常见的需求之一。而在nodejs中,我们可以利用一些库来完成这个功能。 以下是使用nodejs生成和导出word的完整攻略,包含两个示例: 1. 安装依赖 首先,我们需要使用npm来安装需要的依赖库。 其中,docx可以用来生成word,而fs则是node文件系统模块,用于文件的读写操作,path则是node的…

    Vue 2023年5月27日
    00
  • vue路径写法之关于./和@/的区别

    当使用Vue构建项目时,路径写法是必不可少的知识点,对于路径写法中的”./”与”@/”的区别,以下是详细讲解: 1. 相对路径”./” 使用相对路径”./”,我们可以引用同一目录下的文件或目录。例如,有以下文件目录结构: ├── src │ ├── components │ │ ├── a.vue │ │ ├── b.vue │ ├── views │ │ …

    Vue 2023年5月28日
    00
  • vue的ssr服务端渲染示例详解

    下面是关于“Vue的SSR服务端渲染示例详解”的完整攻略: 一、什么是Vue的SSR服务端渲染? Vue的SSR服务端渲染,全称Server-Side Rendering,是指将Vue组件在服务器端渲染成HTML字符串,然后直接发送给浏览器渲染。相比于传统的客户端渲染,SSR有以下优点: 对于SEO(搜索引擎优化)更加友好,因为搜索引擎爬虫可以直接获取到完整…

    Vue 2023年5月28日
    00
  • Vue3中watch监听对象的属性值(监听源必须是一个getter函数)

    在Vue3中,如果要监听对象的属性值变化,需要使用watch函数,并且监听源必须是一个getter函数。这是因为Vue3中使用了Proxy来实现响应式,并且只有在getter函数中才能正确的捕捉到属性的访问。 下面是完整的攻略,包含两条示例说明: 监听对象的属性值变化 要监听对象的属性值变化,需要使用Vue3中的watch函数。watch函数有两个参数:第一…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部