computed和watch的区别及用法

文章目录

computed

  • 区别
    • 需要被调用,并且return返回出最终结果,调用的时候不需要加()
    • 结果可以被缓存,如果内部属性未发生变化取缓存中的值,否则重新计算
    • 属性的名字不能和data中的属性名冲突
    • 一般用于多个数据影响一个数据的时候
  • 用法
    • 默认只有getter方法
    • 如果需要使用setter方法需要修改计算属性的写法 提示:计算属性的set方法第一次不会被调用,第二次被改变才会调用
computed: {
   // 默认getter的写法
   // fullName () {
   //   return this.firstName + ' ' + this.lastName
   // }
    // 添加setter的写法
    fullName: {
      // getter
      get () {
        console.log('执行get方法')
        return this.firstName + ' ' + this.lastName
      },
      // setter 
      set (val) {
        console.log(val) // 最终计算属性fullName的值
        this.test = '测试1111'
      }
    }
  }

watch

  • 区别
    • 不需要被调用,可以没有return关键字
    • 函数的名字必须和data中定义的变量名保持一致
    • 一般用于一个数据影响多个数据
  • 用法
    • 如果要监听对象的话需要deep关键字设置为true
    • 如果想要watch声明了属性后立刻监听执行函数则需要immediate关键字设置为true
 watch: {
    obj: {
      deep: true,
      immediate: true,
      handler (newVal, oldVal) {
        console.log('改变了')
        console.log(newVal, oldVal)
      }
    }
  }

提示:直接监听obj对象,代表给obj中所有属性都加上了监听器,其中一个属性的值发生改变则会执行所有的监听器,这样做开销很大,如果只需要监听其中一个则可以这样写:

 watch: {
    'obj.name': {
      deep: true,
      immediate: true,
      handler (newVal, oldVal) {
        console.log('改变了')
        console.log(newVal, oldVal)
      }
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力让自己的选择变得正确

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值