详解Vue中的watch和computed

当我们在使用Vue.js框架时,经常会用到watch和computed这两个属性,这两个属性的作用是监控数据的变化并且触发响应。

watch属性

watch属性用于监听Vue实例数据的变化,当数据变化时触发一些回调函数。watch属性一般用于需要执行异步或复杂计算的场景,比如API请求或者复杂的数据过滤。一般来说,我们要对某个属性使用watch属性,需要在Vue实例的watch对象中定义一个同名的属性,并且设置一个监听回调函数。

下面是一个使用watch属性的示例,在这个案例中我们需要监听用户在输入框中输入的文字,然后通过Ajax请求API数据并渲染出来:

<template>
  <div>
    <input type="text" v-model="query">
    <ul>
      <li v-for="item in searchResult" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        query: '',
        searchResult: [],
      }
    },
    watch: {
      query(newQuery) { // 监听输入框的变化
        if (newQuery === '') return; // 不处理空字符串
        axios.get('https://api.example.com/search', { params: { q: newQuery } }).then(res => {
          this.searchResult = res.data.result;
        });
      }
    }
  }
</script>

在这个案例中,我们监听了输入框的变化,并且请求API数据,将数据赋值给searchResult属性。

computed属性

computed属性用于监听数据并且实时计算新的属性值。与watch属性不同的是,computed属性只需要定义一个属性的计算函数即可,Vue.js会自动为我们缓存计算后的值,基于依赖的数据变化,Vue.js也会自动更新计算后的值。

下面是一个使用computed属性的示例,在这个案例中,我们需要计算学生成绩的排名和平均值:

<template>
  <div>
    <ul>
      <li v-for="score in scores" :key="score.id">
        {{ score.name }}: {{ score.score }}
      </li>
    </ul>
    <p>
      平均分:{{ average }}
    </p>
    <p>
      排名:{{ ranking }}
    </p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        scores: [
          { name: '张三', score: 80 },
          { name: '李四', score: 90 },
          { name: '王五', score: 70 },
          { name: '赵六', score: 85 },
        ]
      }
    },
    computed: {
      average() { // 计算平均分
        const total = this.scores.reduce((acc, score) => acc + score.score, 0);
        return (total / this.scores.length).toFixed(2);
      },
      ranking() { // 计算排名
        const scoresSorted = this.scores.slice().sort((a, b) => b.score - a.score);
        const index = scoresSorted.findIndex(score => score.score === this.scores[0].score);
        return index + 1;
      }
    }
  }
</script>

在这个案例中,我们使用computed属性分别计算了平均分和排名,computed属性自动监测依赖数据的变化并且实时计算新的值。

以上是watch和computed的完整攻略,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Vue中的watch和computed - Python技术站

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

相关文章

  • Vue3中的ref为何要用.value进行值的调用呢

    在Vue3中,ref用作响应式数据的定义和访问,但其访问方式与Vue2.x有所不同,需要使用 .value 属性来访问具体的值。 这是因为 Vue3.x 中的响应式系统使用了 ES6 的 Proxy,而 .value 非常巧妙地利用了 ES6 Proxy 的 get 和 set 方法。每个 ref 对象本身其实不是一个值,而是一个包含一个值的对象,并且这个值…

    Vue 2023年5月27日
    00
  • vue中的双向数据绑定原理与常见操作技巧详解

    Vue中的双向数据绑定原理与常见操作技巧详解 1. 双向数据绑定原理 Vue中的双向数据绑定是通过 v-model 指令实现的。双向数据绑定本质上是一个语法糖,它实际上是将输入事件和属性绑定事件结合在一起,使得不仅仅当属性值改变时,视图也可以立刻改变,同时也可以通过视图改变属性值,从而实现双向数据绑定。 当我们使用 v-model 指令时,例如: <i…

    Vue 2023年5月27日
    00
  • 一步步详细讲解vue3配置ESLint

    下面是一步步详细讲解vue3配置ESLint的完整攻略: 步骤一:安装ESLint 首先,我们需要在项目中安装ESLint。可以使用下面的命令来进行安装: npm install eslint –save-dev 步骤二:安装Vue3的ESLint插件 接下来,我们需要安装Vue3的ESLint插件。可以使用下面的命令进行安装: npm install e…

    Vue 2023年5月28日
    00
  • vue计时器的实现方法

    下面是关于vue计时器实现方法的详细攻略。 1. 前置知识 Vue.js框架基础知识 Vue.js生命周期钩子函数 Vue.js计算属性 2. 实现方法 2.1 通过setInterval实现 我们可以通过JavaScript自带的setInterval函数来实现一个简单的计时器。对于Vue.js来说,我们可以在组件中使用created生命周期函数来创建一个…

    Vue 2023年5月29日
    00
  • 详解vuex的简单使用

    详解vuex的简单使用 什么是vuex Vuex是Vue.js的状态管理库,在大型单页应用中,管理共享的状态是比较困难的,因为多个组件共享状态,会导致代码结构不易维护。而Vuex就是为了解决此类问题而诞生的。 Vuex采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex所存储的状态可以用之内的方法触发改变,且变化…

    Vue 2023年5月27日
    00
  • Vue实现日历小插件

    下面是“Vue实现日历小插件”的完整攻略: 1. 确定需求和功能 在开发一个Vue的日历小插件之前,我们需要先明确需求和功能,常见的日历插件主要包括以下几点: 日历头部展示当前的日期或月份 展示每个月份所有的日期 支持选择日期等操作 2. 分析和设计组件 在设计组件之前,我们需要先分析和预设组件的结构和数据流,方便后续的代码开发。 我们的日历小插件组件需求可…

    Vue 2023年5月29日
    00
  • Vue简单封装axios网络请求的方法

    下面是“Vue简单封装axios网络请求的方法”的完整攻略。 1. 确认项目中axios库的使用 在使用Vue封装axios网络请求之前,需要先确认项目中是否已经引入axios库。如果没有引入,则需要在项目中安装axios: npm install axios –save 如果已经引入了axios库,则可以直接开始Vue封装axios网络请求的操作。 2.…

    Vue 2023年5月28日
    00
  • 解决ie11 SCRIPT5011:不能执行已释放Script的代码问题

    当使用IE11访问某些页面时,可能会出现SCRIPT5011:不能执行已释放Script的代码问题,这是由于IE11中的脚本引擎与之前版本的IE存在不同的行为所导致的。如果您遇到了这个问题,那么请按照以下攻略进行解决: 步骤1:确保它是由IE11引起的问题 首先,需要确认这个问题是由IE11引起的。可以在其他现代浏览器(如Chrome、Firefox等)中访…

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