首页 > 其他分享 >计算属性

计算属性

时间:2023-04-22 20:45:44浏览次数:25  
标签:return author lastName books 计算 publishedBooksMessage 属性

模板中的表达式虽然方便但只适合用来做简单的操作,因为如果在模板中写太多逻辑会让模板变得臃肿,难以维护,如下面这样一个对象:

export default {
  data() {
    return {
      author: {
        name: 'John Doe',
        books: [
          'Vue 2 - Advanced Guide',
          'Vue 3 - Basic Guide',
          'Vue 4 - The Mystery'
        ]}}}}

需求是根据author是否已有一些书籍来展示不同的信息

<p>Has published books:</p>
<span>{{ author.books.length > 0 ? 'Yes' : 'No' }}</span>

这里的模板表达式就有些复杂了,因此可添加如下计算属性:

computed: {
    // 一个计算属性的 getter
    publishedBooksMessage() {
      // `this` 指向当前组件实例
      return this.author.books.length > 0 ? 'Yes' : 'No'
    }
  }
<p>Has published books:</p>
<span>{{ publishedBooksMessage }}</span>

任何依赖于this.publishedBooksMessage的绑定都会同步地更新

 

计算属性缓存 VS 方法

很明显在表达式中调用一个函数也能达到这样的效果

<p>{{ calculateBooksMessage() }}</p>
// 组件中
methods: {
  calculateBooksMessage() {
    return this.author.books.length > 0 ? 'Yes' : 'No'
  }
}

区别在于计算属性会基于其响应式依赖被缓存,这意味着只要author.books没有改变,则publishedBooksMessage就不会改变;而方法调用会在重渲染发生时再次执行函数,也就是说即使author.books改变了,但只要节点没有被重新渲染,则publishedBooksMessage就不会响应式地发生改变。

可写计算属性:(慎用)

计算属性默认是只读的,在一些特殊场景中需要修改时可通过同时提供getter和setter来创建,如

export default {
  data() {
    return {
      firstName: 'John',
      lastName: 'Doe'
    }
  },
  computed: {
    fullName: {
      // getter
      get() {
        return this.firstName + ' ' + this.lastName
      },
      // setter
      set(newValue) {
        // 注意:我们这里使用的是解构赋值语法
        [this.firstName, this.lastName] = newValue.split(' ')
      }
    }
  }
}

当再次运行this.fullName = 'John Doe'时,setter会被调用进而更新this.firstName和this.lastName

 

Getter不应有副作用: 不要在getter中做异步请求或更改DOM

避免直接修改计算属性值:应该更新它所依赖的源状态以触发新的计算,

以上述例子来看即避免修改this.fullName而应通过修改this.firstName和this.lastName来改变this.fullName

 

标签:return,author,lastName,books,计算,publishedBooksMessage,属性
From: https://www.cnblogs.com/zmhz/p/17343869.html

相关文章

  • 计算机网络 ACL和ANT
    目录一、ACL概况二、ACL工作过程三、ACL实验四、ANT概况五、ANT工作过程六、ANT实验            一、ACL概况概念:主要是对报文进行区分,路由器会对报文进行检查,查看是否符合通过标准或者不通过标准,才判断允许通过和不允许通过原理:当数据......
  • 阿里云1+X云计算开发与运维实战——使用弹性伸缩调整弹性计算资源
    实验概述开始实验后,系统会自动创建一台部署了WEB服务器的ECS实例。首先,登陆到阿里云管理控制台,创建该ECS实例的自定义镜像,用于之后的弹性伸缩。然后,使用阿里云弹性伸缩服务,实现ECS实例的定时自动弹性扩容,从而满足在高并发的时候,系统仍然可以正常提供服务。最后,仅清理所有使用阿里云......
  • 阿里云1+X云计算开发与运维实战——使用云监控和弹性伸缩实现弹性架构设计
    实验概述本实验会自动创建2台部署了云监控插件的ECS实例。首先,配置负载均衡实例的监听配置,创建ECS实例的自定义镜像。然后,在创建弹性伸缩服务,配置报警任务,将已创建的ECS实例加入伸缩组和负载均衡实例后端。最后,增加ECS的CPU使用率达到100%,通过弹性伸缩服务,自动新建ECS实例并添加到......
  • 深入 NODEJS 源码探究 CPU 信息的获取与利用率计算
    在Linux下我们通过top或者htop命令可以看到当前的CPU资源利用率,另外在一些监控工具中你可能也遇见过,那么它是如何计算的呢?在Nodejs中我们该如何实现?带着这些疑问,本节会先从Linux下的CPU利用率进行一个简单讲解做一下前置知识铺垫,之后会深入Nodejs源码,去探讨如何......
  • 5.深度学习计算
    层和块importtensorflowastfimportnumpyasnpnet=tf.keras.models.Sequential([tf.keras.layers.Dense(256,activation=tf.nn.relu),tf.keras.layers.Dense(10)])X=tf.random.uniform((2,20))net(X)"""<tf.Tensor:shape=(2,......
  • Java根据ID获取拼多多商品详情 API接口(商品ID、商品标题、价格、原价、昵称、库存、销
    ​ 根据小编对新零售的核心诉求的理解,拼多多其实并不属于新零售实体。而在我国经济红红火火的这个时代,与消费升级并存的对立方向消费降级现象、小镇的中青年的消费偏好、以及一线的消费者复杂甚至相对矛盾的消费特征,和背后由这些消费特征与诉求来决定的电商大格局。Java它是一......
  • meta标签的一些属性描述
    在编写html前端的时候,对于很多头部属性不够理解,网上查询的解释记录一下话不多说,直接开始 <htmllang="en"> 此属性无关紧要,不会影响代码,只是告知浏览器使用的是英语还是其他,对国内的浏览器来说就是打开网页的时候会弹出是否需要翻译; <metacharset="utf-8">  charset......
  • 计算机网络 VRRP和DHCP
    目录 一、vrrp概念二、vrrp工作过程三、vrrp优先级四、vrrp实验五、DHCP概念六、DHCP工作过程七、DHCP实验         一、vrrp概念概念:称虚拟路由器冗余协议,当网关路由器出现故障,一个网段的主机都无法通信,故此vrrp解决问题原理:一组路由器工作......
  • 阿里云1+X云计算开发与运维实战—— 使用负载均衡实现https与http的混合访问
    实验概述    互联网巨头雅虎官方对外发布消息,承认在2014年的一次黑客袭击中,至少5亿用户的数据信息遭窃。此次事件让我们再次意识到网站安全的重要性,网站加密防护的必要性。我们可以使用HTTPS协议对网站进行全站加密,但是,大部分用户已经习惯直接输入域名(即使用 HTTP 协议)访问网......
  • 阿里云1+X云计算开发与运维实战——负载均衡使用初体验
    本实验通过使用阿里云负载均衡SLB以及对负载均衡SLB后端服务器ECS的权重进行修改,可以快速解决上述的问题。实验目标 完成此实验后,可以掌握的能力有:配置负载均衡SLB的监听规则,并将ECS实例部署到SLB后端;通过设置负载均衡SLB后端服务器ECS的权重值,分配用户访问后端ECS实例的比例。背景......