当前位置: 首页 > article >正文

watch和computed的使用及区别

一、watch侦听器

watch侦听器允许开发者监听数据的变化,从而针对数据的变化做特定的操作。

immediate选项

默认情况下,组件在初次加载完毕后不会调用watch侦听器。如果想让watch侦听器立即被调用,则需使用immediate选项。

deep选项

当watch侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。需要使用deep选项

监听对象单个属性的变化

<template>
  <input type="text" v-model.trim="msg">
  <input type="text" v-model.trim="info.msg">
  <input type="text" v-model.trim="info.value">
</template>
<script>
export default {
        data(){
            return{
                msg:'zs',
            info:{
                    msg:'',
                value:''
            }
        }
    },
    watch:{
            //简写,用于基本的 watch 需求。不支持更多配置选项,如 immediate 和 deep。
        // msg(newVal,oldVal){
            //     console.log('newVal,oldVal', newVal,oldVal);
        // },
        msg:{
                handler(newVal,oldVal){
                console.log('newVal,oldVal', newVal,oldVal);
        },
            immediate:true
        },
        info:{
                handler(newVal,oldVal){
                console.log('深度监听对象属性newVal,oldVal', newVal,oldVal);
        },
            immediate:true,
            deep:true
        },
        'info.msg':{
                handler(newVal,oldVal){
                console.log('监听单个属性newVal,oldVal', newVal,oldVal);
        },
            immediate:true,
            deep:true
        }
    }
}
</script>

二、计算属性computed


计算属性本质上是一个function函数,可以监听data中数据的变化,并return一个计算后的值,供组件渲染dom时使用。

计算属性会缓存计算的结果,只有在计算属性的依赖项发生变化时,才会重新计算。

计算属性只能当作普通数据项使用,不能当作方法调用(不能使用括号调用)。


<template>
    <div>
        <input type="text" v-model.number="num">
    </div>
    <div>{{ plus }}</div>
</template>
<script>
  export default {
      name:'demo',
      data(){
          return{
              num:111
          }
      },
      computed:{
        plus(){
           return  this.num*2
        }
      }
  }
</script>

三、计算属性和侦听器的区别

应用场景不同:

计算属性侧重于监听多个值的变化,最终计算并返回一个新值

侦听器侧重于监听单个数据的变化,最终执行特定的业务处理,不需要有任何返回值


http://www.kler.cn/a/317071.html

相关文章:

  • Unity3D 包体裁剪与优化详解
  • 翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践
  • 【JAVA】Java基础—面向对象编程:封装—保护类的内部数据
  • Vue7种组件之间通信方式
  • EasyExcel 使用多线程按顺序导出数据
  • 【Elasticsearch入门到落地】1、初识Elasticsearch
  • Correcting Chinese Spelling Errors with Phonetic Pre-training(ACL2021)
  • Python Web 面试题
  • Spring Boot自定义配置项
  • [leetcode刷题]面试经典150题之6轮转数字(简单)
  • k8s上安装prometheus
  • 字母与符号检测系统源码分享
  • ubuntu、linux安装redis(使用tar包的方式)
  • 前端——实现时钟 附带小例子
  • 数据结构:线性表
  • 2024从传统到智能,AI做PPT软件的崛起之路
  • 【文心智能体】 旅游手绘手帐 开发分享 零代码 手绘风景 记录行程和心情 旅游攻略
  • 鹏哥C语言49---第5次作业:选择语句 if 和 switch
  • 脚本注入网页:XSS
  • springboot中的异步任务
  • Matplotlib-数据可视化详解
  • 瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商
  • git show 命令
  • Unity中Rigidbody 刚体组件和Rigidbody类是什么?
  • 【flex-shrink】计算 flex弹性盒子的子元素的宽度大小
  • 【27】C++项目练习