1、什么是计算属性

  • 如果模板中的表达式存在过多的逻辑,那么模板会变得臃肿不堪,维护起来也异常困难,因此为了简化逻辑出现了计算属性;

    <template>
    <div id="example">
    <p>{{message.split(" ").reverse().join('!')}}</p>
    </div>
    </template>
    <script>
    export default {
    name: "example",
    data() {
    return {
    message : 'i am chinese person'
    };
    },
    methods : { },
    mounted(){ }
    };
    </script>

    上述表达式比较繁琐,因此我们采用计算属性实现

  • 特点:在一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以;
    <template>
    <div id="example">
    <p>源数据:{{message}}</p>
    <p>更改后的数据:{{changeMessage}}</p>
    </div>
    </template>
    <script>
    export default {
    name: "example",
    data() {
    return {
    message : 'i am chinese person'
    };
    },
    computed : {
    //getter方法
    changeMessage : function(){//无需进行声明
    return this.message.split(" ").reverse().join('!')
    }
    }
    };
    </script>

    结果为:

  • 计算属性拥有的两个方法:getter   setter   用来实现数据的双向绑定

    <template>
    <div id="example">
    <p>给定以下三个词语组成一句话</p>
    <span>{{combine}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <span>{{mom}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <span>{{dad}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <p style="padding:12px 0">答案为:{{result}}</p>
    <button @click="btn">改变语句</button>
    </div>
    </template>
    <script>
    export default {
    name: "example",
    data() {
    return {
    mom: "妈妈",
    dad: "爸爸",
    combine: "组成了一个家"
    };
    },
    computed: {
    result : {//与不写get set方法的形式有区别
    //一个计算属性的getter
    get : function(){//三个值变化的时候,result的值会自动更新,也会自动更新DOM结构
    return this.mom + this.dad + this.combine
    },
    // 一个计算属性的setter
    set : function(newVal){//当设置result的时候,其他的值也会相应的发生改变
    this.mom = newVal.substr(0,2);
    this.dad = newVal.substr(2,2);
    this.combine = newVal.substr(4)
    }
    }
    },
    methods : {
    btn(){
    this.result = "医生警察为人民服务"
    }
    }
    };
    </script>

    首次渲染结果为:

      点击按钮结果为:

 2、计算属性缓存(最大的特点)-----属性变化才执行getter函数,否则使用缓存  默认为true使用缓存

  • 作用:如果频繁的使用计算属性,而计算属性方法中有大量的耗时操作(例如getter中循环一个大的数组以执行很多操作),会带来一些性能问题;

    <template>
    <div id="example">
    <p>给定以下三个词语组成一句话</p>
    <span>{{combine}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <span>{{mom}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <span>{{dad}}</span>&nbsp;&nbsp;&nbsp;&nbsp;
    <p style="padding:12px 0">答案为:{{result}}</p>
    <button @click="btn">改变语句</button>
    </div>
    </template>
    <script>
    export default {
    name: "example",
    data() {
    return {
    mom: "妈妈",
    dad: "爸爸",
    combine: "组成了一个家"
    };
    },
    computed: {
    result : {//与不写get set方法的形式有区别
    //一个计算属性的getter
    cache: true,//打开缓存
    get : function(){//三个值变化的时候,result的值会自动更新,也会自动更新DOM结构
    return new Date().getTime() + this.mom + this.dad + this.combine
    },
    // 一个计算属性的setter
    set : function(newVal){//当设置result的时候,其他的值也会相应的发生改变
    this.mom = newVal.substr(0,2);
    this.dad = newVal.substr(2,2);
    this.combine = newVal.substr(4)
    }
    }
    },
    methods : {
    btn(){
    this.result = "医生警察为人民服务"
    }
    }
    };
    </script>

3、使用过程中遇到的问题

  • 计算属性getter不执行的场景

    • 当包含计算属性的节点被移除并且模板当中其他地方没有在引用该属性时,对应的getter不会再执行;

      <template>
      <div id="example">
      <button @click="btn">总价格的显示隐藏</button>
      <p v-if="showTotal">总价格是:{{totalPrice}}</p>
      </div>
      </template>
      <script>
      export default {
      name: "example",
      data() {
      return {
      showTotal : true,
      basePrice : 100,
      };
      },
      computed: {
      totalPrice : {
      get : function(){
      return this.basePrice * 99
      }
      }
      },
      methods: {
      btn(){
      this.showTotal = !this.showTotal
      }
      }
      };
      </script>

      在本程序中,p元素移除后,计算属性在别的地方不会再被使用,因此getter方法不会被执行;若每次都不执行,请加入缓存cache:false

    • 当节点移除,其他地方使用计算属性时:
      <template>
      <div id="example">
      <p>{{totalPrice}}</p>
      <button @click="btn">总价格的显示隐藏</button>
      <p v-if="showTotal">总价格是:{{totalPrice}}</p>
      </div>
      </template>
      <script>
      export default {
      name: "example",
      data() {
      return {
      showTotal : true,
      basePrice : 100,
      };
      },
      computed: {
      totalPrice : {
      cache : false,
      get : function(){
      console.log(1)
      return this.basePrice * 99
      }
      }
      },
      methods: {
      btn(){
      this.showTotal = !this.showTotal
      }
      }
      };
      </script>

      每次都执行getter

简述Vue中的计算属性的更多相关文章

  1. Vue学习之vue中的计算属性和侦听器

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Vue中的计算属性与$watch

    计算属性:在模板中绑定表达式是非常便利的,但是他们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么vue.js将绑定表达式限制为一个表达式. ...

  3. Vue中的计算属性和监听器(computed 与 watch)

    react中数据是单向绑定的,而vue中数据是双向绑定的.为什么? 在react中,主要是通过setState 去改变state的值:而在vue中,会自动的触发set 与get 改变属性的值. 在vu ...

  4. 浅谈vue中的计算属性和侦听属性

    计算属性 计算属性用于处理复杂的业务逻辑 计算属性具有依赖性,计算属性依赖 data中的初始值,只有当初始值改变的时候,计算属性才会再次计算 计算属性一般书写为一个函数,返回了一个值,这个值具有依赖性 ...

  5. 怎样理解 Vue 中的计算属性 computed 和 methods ?

    需求: 在 Vue 中, 我们可以像下面这样通过在 引号 或 双花括号 内写 js 表达式去做一些简单运算, 这是可以的, 不过这样写是不直观的, 而且在 html 中 夹杂 一些运算逻辑这种做法其实 ...

  6. Vue中computed(计算属性)、methods、watch的区别

    实现效果:字符串的动态拼接 methods方法 html: <div id="app"> <!-- 监听到文本框数据的改变 --> <input ty ...

  7. Vue中的计算属性

    一.什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护. 二.计算属性的用法 在一个计算属性里可以完成各种复杂的逻辑,包括运算.函 ...

  8. Vue中computed计算属性

    话不多说,使用方法直接上代码//在模板中调用computedTest这个函数,切记不要在函数后添加()<template> <div class="home"&g ...

  9. vue中computed计算属性与methods对象中的this指针

    this 指针问题 methods与computed中的this指针 应该指向的是它们自己,可是为什么this指针却可以访问data对象中的成员呢? 因为new Vue对象实例化后data中的成员和c ...

随机推荐

  1. 2019 计蒜之道 初赛 第二场 B. 百度AI小课堂-上升子序列(简单) ( 实现)

    题目背景 ​91029102 年 99 月 22 日,百度在 X 市 XX 中学举办的第一场 AI 知识小课堂大获好评!同学们对矩阵的掌握非常棒. 今天的 AI 知识小课堂的第二场开讲啦.本场 AI ...

  2. CCPC-Wannafly Winter Camp Day1 流流流动 (树形dp)

    题目描述 喜欢数学的wlswls最近被萎住了. 现在他一共有1...n1...n这么多数字,取数字ii会得到f[i]f[i]的收益.数字之间有些边,对于所有的i(i != 1)i(i!=1),若ii为 ...

  3. Tensorflow 2.0 学习资源

    我从换了新工作才开始学习使用Tensorflow,感觉实在太难用了,sess和graph对 新手很不友好,各种API混乱不堪,这些在tf2.0都有了重大改变,2.0大量使用keras的 api,初步使 ...

  4. At grand 022 GCD序列构造 dp/floyd二进制变换最少费用

    A diverse words指的是每一个字母在单词中出现的次数不超过1的单词 题目要求你求出字典序比当前给定单词大的字典序最小单词 1.如果给定的单词长度小于26 就遍历一次在单词尾部加上字典序最小 ...

  5. ubuntu(linux)如何安装nginx?

    之前要在linux下面安装nginx,弄了半天,终于搞定了,下面给大家详细一下安装流程及安装报错解决方案: 安装共分为5步搞定: 1.进入src目录(下载存放目录)      cd /usr/loca ...

  6. adam优化

    AdaGrad (Adaptive Gradient,自适应梯度) 对每个不同的参数调整不同的学习率, 对频繁变化的参数以更小的步长进行更新,而稀疏的参数以更大的步长进行更新. gt表示第t时间步的梯 ...

  7. python-第三方包的安装和升级和卸载

    安装源: 豆瓣   http://pypi.douban.com/simple/ 本地安装: egg文件:  使用settools自带的安装脚本easy_install进行安装 whl文件:      ...

  8. linux运维、架构之路-linux基础知识

    1.PATH环境变量 LANG ——————>变量名字 $LANG ——————>查看变量内容 LANG= ——————>修改变量 系统环境变量填加内容前面使用export expo ...

  9. luogu 4381 [IOI2008]Island 单调队列 + 基环树直径 + tarjan

    Description 你将要游览一个有N个岛屿的公园.从每一个岛i出发,只建造一座桥.桥的长度以Li表示.公园内总共有N座桥.尽管每座桥由一个岛连到另一个岛,但每座桥均可以双向行走.同时,每一对这样 ...

  10. [转]SQLServer : EXEC和sp_executesql的区别

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql.通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...