1、计算属性简介

在原生的JavaScript中我们需要一个来自不同数的和的变量,
我们会使用let num=a+b:这种写法,但是当a和b发生改变的
时候,num并不会自动修改,在vue中我们提供了计算属性
可以很好的解决这个问题。

2、计算属性的语法

  • 在vue的配置项中添加
computed:{
	"计算属性名" () {
		return "值"
	}
}

3、计算属性的使用

<template>
  <div>
    <!-- 调用计算属性 -->
    <p>num1+num2的和是:{{ num }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      num1: 10,
      num2: 20,
    };
  },
  // 计算属性
  /**
   * 使用场景:
   * 一个变量的值需要其他变量计算而来
   *
   * 语法:
   *computed:{
	  "计算属性名" () {
		return "值"
	}
}
   */
  computed: {
    num() {
      return this.num1 + this.num2;
    },
  },
};
</script>

<style lang="less" scoped>
</style>

计算属性也是vue的变量,所以在使用过程中,不能和data中的vue变量名重名

4、计算属性缓存特性

首先我们看如下的代码,多次使用计算属性和函数,我们通过控制台看问题所在。

【代码】:

<template>
  <div>
    <p>原来的msg:{{ msg }}</p>
    <p>计算属性中的msg: {{ reverseMsg }}</p>
    <p>计算属性中的msg: {{ reverseMsg }}</p>
    <p>计算属性中的msg: {{ reverseMsg }}</p>
    <p>计算属性中的msg: {{ reverseMsg }}</p>
    <p>计算属性中的msg: {{ reverseMsg }}</p>
    <p>函数中的msg: {{ getMsg() }}</p>
    <p>函数中的msg: {{ getMsg() }}</p>
    <p>函数中的msg: {{ getMsg() }}</p>
    <p>函数中的msg: {{ getMsg() }}</p>
    <p>函数中的msg: {{ getMsg() }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      msg: "404 not found!!",
    };
  },
  methods: {
    getMsg() {
      console.log("函数执行了");
      this.msg.split("").reverse().join("");
    },
  },
  // 计算属性
  computed: {
    reverseMsg() {
      console.log("计算属性执行了!!");
      return this.msg.split("").reverse().join("");
    },
  },
};
</script>

<style>
</style>

【效果图】:
在这里插入图片描述
【控制台结果】:
在这里插入图片描述
【解释】:

  • 在控制台中我们看到计算属性只执行了一次,而函数调用了多少次就执行了多少次
  • 计算属性是带缓存的,只要计算属性中的依赖项不发生改变,执行一次之后就会将结果保存的缓存中
  • 只要计算的属性在下次调用的时候,依赖项不发生改变就会从缓存中获取结果
  • 只有当依赖项发生改变的时候,计算属性会自动重新执行,并将新的数值缓存

【图解计算属性的缓存特性】:
在这里插入图片描述

5、计算属性的完整写法

在以上的使用过程中我们只能通过计算属性获取到数值,不能设置计算属性的数值,
因此,在使用计算属性过程中,如果需要设置计算属性的值,就需要我们使用计算
属性的完整写法。

【语法】:

computed:{
	"属性名":{
		set(){
		
		},
		get(){
			return "值"
		}
	}
}

【演示】:

<template>
  <div>
    <span>姓名:</span>
    <input type="text" v-model="name" />
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  // 计算属性完整写法
  computed: {
    name: {
      // 给name赋值触发set方法
      set(val) {
        console.log(val);
      },
      // 获取name触发get方法
      get() {
        return this.val;
      },
    },
  },
};
</script>

<style>
</style>
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐