3.vue计算属性

1、计算属性
  再vue中如果出现表达式过长或者逻辑比较复杂,这时会导致代码不清晰,臃肿,难以维护所以我们会使用计算属性进行书写
  再计算属性中可以放负责的逻辑,可以是函数,表达式等,但最终会返回一个结果,再使用计算属性的时候只要数据变化,计算属性就会重新执行,
  视图也就跟着重新发生变化
  每一个计算属性都是用的是函数进行表示的,最终返回的是一个值
2、实现计算属性的方法
  所有的计算属性都是以函数的形式写在vue实例中的computed内,最终返回的是计算之后的结果
  对于计算属性来说,因为它本身返回的就是一个结果,一个值,所以很多情况下,直接作为内容输出到DOM即可,会自动的进行执行
  因为计算属性最终返回的是一个值,所以很多情况下我们都是需要加上return的

3、computed是计算属性:在使用的时候返回的是一个值,都是作为函数来写的,在调用的时候直接写名字即可
  methods是方法:在使用的时候本身就是一个函数,所以返回的也是函数,在调用的时候按照正常函数调用的方式进行调用才行
4、为什么在用methods的时候会自动更新:
  因为在使用methods的时候,数据发生变化,组件就会重新更新,重新渲染,特点就是只要重新渲染了,那么methods中的函数就会被全部重新执行
5、使用computed不会自动刷新:
  因为在使用computed的时候它是会产生缓存的,只有当数据改变的时候,才会重新计算,但是其他的计算属性是不会被执行的

  所以在使用的时候计算属性要比methods方法更加的节省性能
  如果是负责逻辑的话使用计算属性,执行的时候会直接从缓存中执行

<template>
  <div id="app">
    <p>{{reveiveMsg}}</p>
    <p>{{clickA()}}</p>
    <button @click="a++">按钮methods_a++</button>
     <button @click="b++">按钮methods_b++</button>
    <p>a:{{a}}</p>
    <p>b:{{b}}</p>
     <p> sum+a={{addA}}</p> 
     <p> sum+a={{addB}}</p> 
 </div>
</template>

<script>
export default {
  name: 'App',
  data () {
          return { 
              msg: '好好学习天天向上a' ,
              isture: false,
              isElseTrue:true,
              a: 0,
              b: 0,
              sum: 20
          }
  },
  methods: {          //Imethod中写的是对事件处理的处理函数
    clickA: function () {
        return   this.msg
    },
    addA: function () {
       console.log("执行AA")
       return this.a + this.sum
    },
    addB: function () {
       console.log("执行BB")
        return this.b + this.sum
    }
  },
  computed: {
         reveiveMsg: function () {
           return   this.msg
         },
    addA: function () {
       console.log("执行AA")
       return this.a + this.sum
    },
    addB: function () {
       console.log("执行BB")
        return this.b + this.sum
    }
  }
}

</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
.test{
  color:skyblue;
}
</style>

 

posted @ 2020-06-07 22:20  陶智斌  阅读(1468)  评论(0编辑  收藏  举报