计算属性-回顾

115 阅读1分钟

1657359242909.png

<template>
  <div>
    <!-- 计算属性:作用:根据一些数据计算出来一个属性 -->
    <!-- 当计算属性依赖的数据变化的时候,计算属性会重新计算 -->
    <!-- 计算属性是作为变量使用的,不要使用括号语法 -->
    <!-- 计算属性不能和data里的变量重名 -->
    <h1>总价:{{ sum }} = {{ A }} + {{ B }}</h1>
    a:<input type="text" v-model.number="A" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      A: 8,
      B: 10,
    };
  },
  //计算属性声明在data同级computed对象里面
  computed: {
    sum() {
      //计算属性声明为方法
      return this.A + this.B;
    },
  },
};
</script>
<style>
</style>

1657363283572.png

  1. 计算属性的使用场景?
    • 当量的值,需要通过别人计算而得来
  2. 计算属性特点?
    • 计算属性的依赖发生改变的时候,重新计算结果返回
  3. 计算属性注意事项?
    • 计算属性名和data里妹子不能重复

计算属性缓存

计算属性,基于依赖项的值进行缓存,依赖的变量,都直接从缓存区结果

  1. 计算属性好处?
    • 带缓存
    • 依赖项不变,直接从哪缓存取
    • 依赖项改变,函数自动执行并重新缓存
  2. 计算属性使用场景?
    • 当变量值。依赖其他变量计算而得来才用(一般用户购物车总价,和全选被选

计算总价看 下图

1657371316250.png

1657375082945.png

1657378072930.png

<template>
  <div>
    <p>全选:<input type="checkbox" v-model="isAll" /></p>
    <ul>
      <li v-for="item in list" :key="item.id">
        <input type="checkbox" v-model="item.checked" />
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  data() {
    return {
      list: [
        { id: 1, name: "八戒", checked: false },
        { id: 2, name: "悟空", checked: false },
        { id: 3, name: "唐僧", checked: false },
        { id: 4, name: "白龙马", checked: false },
      ],
    };
  },
  //计算属性
  computed: {
    isAll: {
      //set  设置,更新   set是设置我们的计算属性用的
      set(value) {
        //如果全选勾中 那么数组中的每一项都为true
        // if (value === true) {
        //   this.list.forEach((item) => {
        //     item.checked = true;
        //   });
        //   //
        // } else {
        //   this.list.forEach((item) => {
        //     item.checked = false;
        //   });
        // }

        //优化写法
        this.list.forEach((item) => {
          item.checked = value;
        });
      },

      //get  获取  get是获取我们的计算属性的内容
      get() {
        let all = true;
        this.list.forEach((item) => {
          if (item.checked === false) {
            all = false;
          }
        });
        return all;
      },
    },
  },
};
</script>
<style>
</style>