(15)Vue.js 计算属性

• Vue.js 的视图不建议书写复杂逻辑,这样不利于维护。

• Vue.js 的视图不建议书写复杂逻辑,这样不利于维护。

封装函数是很好的方式,但有时重复的计算会消耗不必要的性能。

再methods选项中通过调用方法,每调用一次都要计算一次,损耗不必要的性能。

如何提高执行效率? 通过将methods选项,替换成computed计算属性的方式。

计算属性使用时为属性形式,访问时会自动执行对应函数。

通过如下示例我们看到,我们调用了3次getResult方法,但是我们的控制台只输出了一次,说明我们的计算属性只执行一次计算,它将第一次的计算结果缓存起来,将来其他的地方再使用的时候,直接拿取第一次计算的结果即可,提高了执行效率。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>20.computed计算属性</title>
</head>
<body>
  <div id="app">
    <!-- <p>{{ getSum() }}</p>
    <p>{{ getSum() }}</p>
    <p>{{ getSum() }}</p> -->
    <p>{{ getResult }}</p>
    <p>{{ getResult }}</p>
    <p>{{ getResult }}</p>
  </div>
  <script src="../01.vue.js入门/js/vue-2.6.14.js"></script>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        arr: [1,2,3,4,5]
      },
      methods: {
        getSum() {
          console.log('执行了函数功能');
          var arr = this.arr;
          var sum = 0;
          for (var i = 0; i < arr.length; i++) {
            sum += arr[i];
          }
          return sum;
        }
      },
      computed: {
        getResult() {
          console.log('执行了函数功能');
          var arr = this.arr;
          var sum = 0;
          for (var i = 0; i < arr.length; i++) {
            sum += arr[i];
          }
          return sum;
        }
      }
    })
  </script>
</body>
</html>

总结:methods 与 computed 区别?

• computed 具有缓存型,methods 没有。
• computed 通过属性名访问,methods 需要调用。
• computed 仅适用于计算操作。

对比案例

• 准备一个数组,根据数组数据创建列表。
• 要求:当数据大于10时创建 li,否则不创建。
• 思考以下三种实现方式:
• v-if 与 v-for 结合
• v-for 与 methods 结合
• v-for 与 计算属性computed结合

示例1:v-if 与 v-for 结合

不推荐v-if 与 v-for 同时应用于同一个元素,这里不能将v-if写在父元素上,因为我们是筛选操作,筛选大于10的,而不是整体的进行操作。

<body>
  <div id="app">
    <ul>
      <li v-if="item > 10" v-for="item in arr">{{ item }}</li>
    </ul>
  </div>
  <script src="../01.vue.js入门/js/vue-2.6.14.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        arr: [1,11,2,22,3,33,4,44,5,55]
      }
    })
  </script>
</body>

示例2:v-for 与 methods 结合

这种方式,每调用一次都要计算一次, 损耗不必要的性能。

<body>
  <div id="app">
    <ul>
      <li v-for="item in fn()">{{ item }}</li>
    </ul>
  </div>
  <script src="../01.vue.js入门/js/vue-2.6.14.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        arr: [1,11,2,22,3,33,4,44,5,55]
      },
      methods: {
        fn () {
          console.log('执行了代码');
          //遍历arr ,找到大于10的数据
          var resultArr = [];
          for(var i = 0;i< this.arr.length;i++) {
            if(this.arr[i] > 10) {
              resultArr.push(this.arr[i]);
            }
          }
          return resultArr;
        }
      }
    })
  </script>
</body>

示例3:v-for 与 计算属性computed 结合

通过如下示例,我们调用了2次result方法,但是我们的控制台只输出了一次,说明我们的计算属性只执行一次计算,它将第一次的计算结果缓存起来,将来其他的地方再使用的时候,直接拿取第一次计算的结果即可,提高了执行效率。

<body>
  <div id="app">
    <ul>
      <li v-for="item in result">{{ item }}</li>
    </ul>
    <ul>
      <li v-for="item in result">{{ item }}</li>
    </ul>
  </div>
  <script src="../01.vue.js入门/js/vue-2.6.14.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        arr: [1,11,2,22,3,33,4,44,5,55]
      },
      computed: {
        result() {
          console.log('执行了代码');
          return this.arr.filter(item => item > 10);
        }
      }
    })
  </script>
</body>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

泽哥ins

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

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

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

打赏作者

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

抵扣说明:

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

余额充值