Vue的watch和computed方法的使用及区别介绍

yizhihongxing

Vue中的watch和computed都是用来监听数据变化的方法,但在使用时有些差别。下面将对Vue的watch和computed进行详细讲解,并给出两个示例。

Watch

Watch的用法

watch可以监听数据的变化,并进行相应的操作。它可以监听一个或多个数据的变化,当数据发生变化时,会执行相应的回调函数。

watch: {
  username(newVal, oldVal) {
    console.log('新值:' + newVal + ',旧值:' + oldVal)
  }
}

上面的示例中,我们使用watch监听了username这个数据。当username的值发生变化时,回调函数会被调用,并且会接收到两个参数:新值和旧值。

Watch的应用场景

  • 异步操作:watch可以监听 Ajax 请求、用户输入、消息订阅等异步事件,进行操作之后更新数据,从而解决异步数据更新的问题。
  • 复杂计算:当一个数据的改变会影响到多个其它数据的变化的时候,就需要使用watch来监听数据的变化。

Computed

Computed的用法

computed用来声明计算属性,计算属性的值是根据其他属性计算得到的。它会缓存计算结果,在多次读取计算属性时,不会重复计算。

computed: {
  fullName() {
    return this.firstName + " " + this.lastName;
  }
}

上面的示例中,我们声明了一个fullName的计算属性,该计算属性的值是根据firstNamelastName来计算得到的。

Computed的应用场景

  • 计算昂贵的操作:如果一个操作比较昂贵,使用computed可以避免在每次读取值时重新计算,只有在依赖数据发生变化时才重新开始计算。
  • 综合用途:computed可以在模板中使用,而watch不行。computed还可以和v-model结合使用,实现双向绑定。

区别介绍

  • Computed是计算属性,Watch是侦听属性。
  • Computed根据它的依赖缓存计算值,只有当依赖项发生改变时才会重新计算;Watch可以监听到值的变化,在回调函数中实现自定义逻辑。
  • Computed适合用于多个属性相互依赖的情况,当依赖的属性变化时,计算属性会自动更新;Watch更加灵活,可以执行任何逻辑,并且可以监听到一个数组的变化。
  • Computed会有缓存,只要相关属性没有发生改变,多次访问计算属性不会重复计算;watch没有缓存,会在每次数据变化时执行。

示例一

下面是一个使用computed计算属性的例子。在表单的计算属性中使用了一个函数,计算了表单中输入的值的总和。

<template>
  <div>
    <input type="text" v-model="value1">
    <input type="text" v-model="value2">
    <input type="text" v-model="value3">
    <p>总和:{{ total }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      value1: 0,
      value2: 0,
      value3: 0
    };
  },
  computed: {
    total() {
      return parseInt(this.value1) + parseInt(this.value2) + parseInt(this.value3);
    }
  }
};
</script>

示例二

下面是一个使用watch侦听属性的例子。监测两个字段的变化,当两个值都有变化时输出一个信息。

<template>
  <div>
    <input type="text" v-model="value1">
    <input type="text" v-model="value2">
  </div>
</template>

<script>
export default {
  data() {
    return {
      value1: "",
      value2: ""
    };
  },
  watch: {
    value1(newValue, oldValue) {
      if (this.value2) {
        console.log(`value1的新值:${newValue},旧值:${oldValue},value2的值:${this.value2}`);
      }
    },
    value2(newValue, oldValue) {
      if (this.value1) {
        console.log(`value2的新值:${newValue},旧值:${oldValue},value1的值:${this.value1}`);
      }
    }
  }
};
</script>

以上就是Vue的watch和computed方法的使用及区别介绍的攻略。希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue的watch和computed方法的使用及区别介绍 - Python技术站

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

相关文章

  • vue中{{}},v-text和v-html区别与应用详解

    让我给你详细讲解一下”Vue中{{ }},v-text和v-html区别与应用详解”。 什么是Vue.js Vue.js是一个轻量级的JavaScript框架,它专注于构建用户界面,同时也可以用于构建单页面应用程序。它的核心是响应式编程,通过对“数据驱动视图”的理念来实现用户界面的构建。Vue.js支持一些基本的指令以实现与用户界面的交互,如:{{}},v-…

    Vue 2023年5月28日
    00
  • 98道经典Vue面试题总结

    感谢您对本网站的关注,以下是关于《98道经典Vue面试题总结》的完整攻略。 一、前言 Vue.js 是一款流行的前端框架,已经成为很多企业和公司的项目必备技术。但是随着 Vue 的普及,Vue 面试题也越来越多,Vue 面试有可能会考到一些比较深入的知识点。因此,对于很多初学者来说,学习 Vue 的同时,也要去了解一些常见的面试题。 本篇文档涵盖了98道面试…

    Vue 2023年5月28日
    00
  • 详解如何实现在Vue中导入Excel文件

    下面是如何在Vue中导入Excel文件的完整攻略: 1. 安装依赖 为了能够读取Excel文件,我们需要使用一个叫做xlsx的库。可以在终端中使用以下命令安装: npm install xlsx –save 2. 导入Excel文件 在Vue中,我们可以使用<input>标签实现文件上传。一般来说,我们会让用户选择一个Excel文件,然后把文件…

    Vue 2023年5月28日
    00
  • vue中this.$refs的坑及解决

    vue中this.$refs的坑及解决 在Vue的开发过程中,我们通过this.$refs来访问DOM元素或子组件实例。但是在使用的过程中,这个特性也有一些坑点需要我们注意。接下来我会详细讲解这些坑点以及如何解决它们。 坑点1:this.$refs在初始化时可能为空 在组件的生命周期中,created钩子函数是在组件的数据和方法都准备就绪,但是DOM并不一定…

    Vue 2023年5月28日
    00
  • 五分钟搞懂Vuex实用知识(小结)

    五分钟搞懂Vuex实用知识(小结)攻略 1.简介 Vuex是Vue.js应用程序开发的首选架构,它是一个状态管理库,将状态集中管理。Vuex主要解决了Vue.js的组件通信和数据共享的问题。 2.核心概念 Vuex的核心概念包括: State:状态,即应用程序中的数据。 Getters:获取状态,用于获取State中的值并进行处理后输出。 Mutations…

    Vue 2023年5月27日
    00
  • 带你一文了解Vue生命周期钩子

    带你一文了解Vue生命周期钩子 Vue生命周期钩子是指Vue在组件实例化、数据更新、渲染页面等不同阶段执行的方法。这些钩子函数对于理解Vue的生命周期非常重要,因为他们使得我们有机会在特定时间节点执行自己的代码。 Vue生命周期的三个阶段 Vue的生命周期可以分为三个主要的阶段: 创建阶段(Creation):在这个阶段Vue实例化组件、设置数据观测、初始化…

    Vue 2023年5月27日
    00
  • 使用Vue调取接口,并渲染数据的示例代码

    下面是使用Vue调取接口并渲染数据的完整攻略。 一、准备工作 在开始之前,需要确保您已经装好了Node.js和Vue-cli。如果还没有安装,可以前往官网进行下载和安装。 二、创建Vue项目 在命令行中输入以下命令创建Vue项目: vue create my-project 这里创建的项目名为my-project。在创建项目的过程中,可以选择使用defaul…

    Vue 2023年5月28日
    00
  • 解决vue数组中对象属性变化页面不渲染问题

    下面是针对“解决vue数组中对象属性变化页面不渲染问题”的完整攻略: 问题背景 使用Vue的开发者肯定知道,当我们在vue组件中有一个数组,其中包含多个对象,而对象的属性发生变化时,页面并不会自动渲染。这是因为Vue根据需求,只会追踪到绑定的属性,而不会追踪到对象本身。 比如我们有如下示例代码: <template> <div> &l…

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