vue学习笔记---(2)计算属性computed和监视属性watch(完整写法和简写形式)

1. 计算属性—computed

  • 定义
    • 需要使用的属性不存在,要通过已存在的属性计算得到
  • 原理
    • 底层借助了Objcet.defineproperty()方法提供的getter和setter。

对于任何复杂逻辑,都应当使用计算属性。

Demo.vue---计算属性完整写法

<template>
  <div>
    <input type="text" v-model="first_name">
    <input type="text" v-model="last_name">
    <h4>你的姓名是: {{fullName}}</h4>
  </div>
</template>

<script>
export default {
  name: 'Demo2',
  data() {
    return {
      first_name: '张',
      last_name: '三',
    }
  },
  computed: {
    fullName: {
      get() {
        return this.first_name + '-' + this.last_name
      },
      set(value) {
        const arr = value.split('-')
        this.first_name = arr[0]
        this.last_name = arr[1]
      },
    },
  },
}
</script>

Demo---简写形式

<template>
  <div>
    <input type="text"
           v-model="first_name">
    <input type="text"
           v-model="last_name">
    <h4>你的姓名是: {{fullName}}</h4>
  </div>
</template>

<script>
export default {
  name: 'Demo2',
  data() {
    return {
      first_name: '张',
      last_name: '三',
    }
  },
  computed: {
    fullName() {
      return this.first_name + '-' + this.last_name
    },
  },
}
</script>

第一次渲染展示
在这里插入图片描述

更改输入框数据在这里插入图片描述

2. 监视属性—watch

  • 当监视的属性发生变化时,自动调用响应的回调函数

计算属性和监视属性的区别:

  1. 功能上:computed是计算属性,watch是监听一个值的变化,然后执行对应的回调。
  2. 是否调用缓存:computed中的函数所依赖的属性没有发生变化,那么调用当前的函数的时候会从缓存中读取,而watch在每次监听的值发生变化的时候都会执行回调。
  3. 是否调用return:computed中的函数必须要用return返回,watch中的函数不是必须要用return。
  4. computed默认第一次加载的时候就开始监听;watch默认第一次加载不做监听,如果需要第一次加载做监听,添加immediate属性,设置为true(immediate:true)
  5. 使用场景:computed----当一个属性受多个属性影响的时候,使用computed-----购物车商品结算。watch–当一条数据影响多条数据的时候,使用watch-----搜索框.

Demo.vue---监视属性的完整写法

<template>
  <div>
    <h3>你当前状态是:{{nowState}}</h3>
    <button @click="changeState">点我切换状态</button>
  </div>
</template>

<script>
export default {
  name: 'Demo3',
  data() {
    return {
      isSlack: false
    }
  },
  methods: {
    changeState() {
      this.isSlack = !this.isSlack
    }
  },
  computed: {
    nowState() {
      return this.isSlack ? '摸鱼' : '躺平'
    }
  },
  watch: {
    isSlack: {
      // 第一次加载时执行一次
      immediate: true,
      // 开启深度监视
      deep: true,
      handler(newValue, oldValue) {
        console.log(`状态被修改,newValue:${newValue}, oldValue: ${oldValue}`);
      }
    }
  }
}
</script>

第一次加载展示---由于第一次加载的时候数据并没有改变,所以oldValue的值为undefined
在这里插入图片描述
点击按钮进行数据修改之后展示
在这里插入图片描述

Demo.vue---监视属性简写形式

简写形式的watch无法进行开启深度监视和第一次加载时执行

<template>
  <div>
    <h3>你当前状态是:{{nowState}}</h3>
    <button @click="changeState">点我切换状态</button>
  </div>
</template>

<script>
export default {
  name: 'Demo3',
  data() {
    return {
      isSlack: false
    }
  },
  methods: {
    changeState() {
      this.isSlack = !this.isSlack
    }
  },
  computed: {
    nowState() {
      return this.isSlack ? '摸鱼' : '躺平'
    }
  },
  watch: {
    isSlack(newValue, oldValue) {
      console.log(`状态被修改,newValue:${newValue}, oldValue: ${oldValue}`);
    }
  }
}
</script>

第一次加载页面展示---简写形式无法开启第一次加载时执行一次
在这里插入图片描述
点击按钮进行修改数据之后的页面展示
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-async-computed.js是一个用于Vue.js的库,它扩展了Vue中的计算属性功能,使之可以支持异步数据获取和计算。 Vue.js计算属性是在模板中根据数据的变化实时计算出新的结果,并实时更新到视图中。然而,在某些情况下,数据的获取和计算可能会涉及异步操作,如从服务器获取数据或处理复杂的计算逻辑。此时,普通的计算属性就不再适用,需要使用异步计算属性才能处理这样的情况。 异步计算属性提供了一个方便的方式来处理异步数据的获取和计算。它的用法类似于普通的计算属性,但是需要使用一个异步函数来定义计算属性的逻辑。这个异步函数可以返回一个Promise对象,用于表示异步操作的结果。 在异步函数中,我们可以执行异步操作,如发送网络请求、读取本地存储等。当异步操作完成后,我们可以通过Promise的resolve方法返回计算属性的结果。在模板中使用异步计算属性时,Vue会自动等待异步操作完成并获取到计算属性的结果,然后更新视图中相应的内容。 通过使用vue-async-computed.js,我们可以轻松地处理复杂的异步计算逻辑,如缓存异步计算结果、处理异步错误等。它的简单易用和强大的功能使得我们可以更加方便地开发处理异步数据的应用程序。无论是获取远程数据还是处理复杂的计算逻辑,vue-async-computed.js都可以帮助我们减少工作量,提高开发效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值