Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue:计算属性

Vue:计算属性

作者头像
姓王者
发布于 2024-10-31 10:47:40
发布于 2024-10-31 10:47:40
15400
代码可运行
举报
文章被收录于专栏:姓王者的博客姓王者的博客
运行总次数:0
代码可运行

我们为什么需要计算属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
全名:<span>{{firstName + '-' + lastName}}</span><br>

vue官方不建议我们在模板这么写,这看起来过于 复杂

示例代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

<template>
    <div class="person">
        姓:<input  type="text" v-model="firstName"> <br>   
        名:<input type="text" v-model="lastName"> <br>
        全名:<span>{{fullName}}</span><br>
        <button @click="changeName">修改姓名</button>
        <!-- 全名 <span>{{firstName}}-{{lastName}}</span> <br> -->
    </div>
</template>


<script setup   lang="ts" name="Personsss">
import {computed, ref} from 'vue'
let firstName= ref('章');
let lastName = ref('礼');
let fullName =computed(
()=>firstName.value.slice(0,1).toUpperCase()+firstName.value.slice(1)+lastName.value
);

</script>

首先我们需要导入computed 然后使用这个计算属性定义fullName 通过这个方法,使得模板变得简易,可读性变高

计算属性默认只可读

事实上如果我在里面定义一个函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function changeName(){
fullName.value='李四'
}

这个changeName函数会报错 无法为“value”赋值,因为它是只读属性。 这是计算属性的只读特性

如何修改?

如果想要修改计算属性的值,我们需要getset方法

例如 来自于vue官方文档

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script setup>
import { ref, computed } from 'vue'

const firstName = ref('John')
const lastName = ref('Doe')

const fullName = computed({
  // getter
  get() {
    return firstName.value + ' ' + lastName.value
  },
  // setter
  set(newValue) {
    // 注意:我们这里使用的是解构赋值语法
    [firstName.value, lastName.value] = newValue.split(' ')
  }
})
</script>

你发现了吗,这种修改本质上还是修改了firstNamelastName,那我们不禁想到,为什么我们不直接修改这两个的值,来实现通过计算属性更新fullName的值呢?

官方推荐

正如官方文档所言 避免直接修改计算属性值​ 从计算属性返回的值是派生状态。可以把它看作是一个“临时快照”,每当源状态发生变化时,就会创建一个新的快照。更改快照是没有意义的,因此计算属性的返回值应该被视为只读的,并且永远不应该被更改——应该更新它所依赖的源状态以触发新的计算。

所以,这种只读属性是必然的,我们完全可以通过修改那两个值实现计算属性的值的更新!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java漫谈-深拷贝与浅拷贝
2、运用反射手段创建对象,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方
WindCoder
2018/09/19
3.2K0
Java设计模式(五)----原型模式
原型模式(Prototype) 一、概述 二、结构 三、浅度克隆和深度克隆  浅度克隆  深度克隆 一、概述  定义:原型模式属于对象的创建模式。通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象。简言之:就是复制粘贴。这就是选型模式的用意。 二、结构 原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件: 1、实现Cloneable接口。在java语言有一个
汤高
2018/01/11
6600
Java设计模式(五)----原型模式
好似你,饼印咁:原型模式、浅拷贝与深拷贝
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。大概意思就是:允许一个对象再创建另外一个可定制的对象,根本无需知道对象创建的细节。其工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。其UML类图如下:
BUG弄潮儿
2021/01/18
3220
好似你,饼印咁:原型模式、浅拷贝与深拷贝
Java基础——clone()方法浅析
一、clone的概念    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?  使用new操作符创建一个对象 使用clone方法复制一个对象    那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时, 首先去看new操作符后面的类型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后
mukekeheart
2018/02/27
7390
Java基础——clone()方法浅析
Java | 浅克隆与深克隆
克隆,即复制一个对象,该对象的属性与被复制的对象一致,如果不使用Object类中的clone方法实现克隆,可以自己new出一个对象,并对相应的属性进行数据,这样也能实现克隆的目的。
JavaFish
2019/10/17
1.8K0
Java | 浅克隆与深克隆
关于Java的拷贝你能说出个123么?
java赋值是复制「对象引用」,如果我们想要得到一个对象的==副本==,使用赋值操作是无法达到目的的:修改新对象的值会同时修改旧对象的值。
sowhat1412
2020/12/02
3130
关于Java的拷贝你能说出个123么?
java 通过Object的clone复制对象
对象的克隆是指创建一个新的对象,且新的对象的状态与原始对象的状态相同。当对克隆的新对象进行修改时,不会影响原始对象的状态。 常规实现
六月的雨在Tencent
2024/03/28
1380
java 通过Object的clone复制对象
Java浅拷贝大揭秘:如何轻松复制两个不同对象的某些相同属性
在Java编程中,经常会遇到需要复制一个对象的属性到另一个对象的情况。这时,可以使用浅拷贝(Shallow Copy)来实现这个需求。那么,什么是浅拷贝呢?浅拷贝是指创建一个新对象,然后将原对象的非静态字段复制到新对象中。这样,新对象和原对象就会有相同的字段值。本文将详细介绍如何使用Java实现浅拷贝,并给出代码示例。
木头左
2024/06/10
3360
java中clone的用法_java clone是浅拷贝吗
Cloneable和Serializable一样都是标记型接口,它们内部都没有方法和属性,implements Cloneable表示该对象能被克隆,能使用Object.clone()方法。如果没有implements Cloneable的类调用Object.clone()方法就会抛出CloneNotSupportedException。
全栈程序员站长
2022/11/04
7820
23种设计模式之原型模式
原型模式 定义: 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 主要用于创建对象 原型模式实现只需要实现一个接口 重写clone()方法 。 我们实现中 会有深拷贝和浅拷贝两种情况。 浅克隆 创建一个羊类 作为prototype public class Sheep{ /** * name名字 * creatTime 创建时间 */ private String name; private Date creatTime; pu
暴躁的程序猿
2022/03/23
1900
23种设计模式之原型模式
Java设计模式之原型模式
现在有一只羊,姓名为:tom,年龄为:1,颜色为:白色,请编写程序创建和tom羊属性完全相同的10只羊。
shaoshaossm
2022/12/27
2300
深入浅出| java中的clone方法
clone,有人称之为克隆,有人称之为复制,其实都是同一个东西 本文称之为"克隆",毕竟人家方法名叫"clone"
KEN DO EVERTHING
2019/01/17
9860
第三阶段-Java常见对象:【第一章 Object类】
在讲解Object类之前,我们不得不简单的提一下什么是API,先贴一组百度百科的解释:
BWH_Steven
2019/08/09
4460
11.JAVA-Object类之finalize(),clone(),toString()等方法覆写
Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用类型为Object的变量指向任意类型的对象。
诺谦
2019/05/24
5020
java中clone_java copyproperties
在日常编码中我们经常需要产生某个对象的副本,这里的副本并不是指向同一个对象的不同引用,而是与当前对象状态一模一样的另一个新的对象。如果使用单纯的引用赋值,会发生什么效果呢?
全栈程序员站长
2022/11/04
7780
图解Java设计模式之原型模式
现在有一只羊tom,姓名为 : tom,年龄为 :1,颜色为 :白色,请编写程序创建和tom羊属性完全相同的10只羊。
海仔
2020/03/19
4800
图解Java设计模式之原型模式
作为所有类的顶层父类,没想到Object的魔力如此之大!
在上一篇博文中我们提到了Java面向对象的四大特性,其中谈及“抽象”特性时做了一个引子,引出今天的主人公Object,作为所有类的顶级父类,Object被视为是James.Gosling的哲学思考,它高度概括了事务的自然与社会行为。
JavaBuild
2024/05/27
1320
作为所有类的顶层父类,没想到Object的魔力如此之大!
详解Java中的clone方法:原型模式
clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?
哲洛不闹
2018/09/19
7660
详解Java中的clone方法:原型模式
Java中的深浅拷贝
堆(heap):主要用于存储实例化的对象,数组。由JVM动态分配内存空间,堆内存还可以用来存放由new创建的对象和数组。一个JVM只有一个堆内存,线程是可以共享数据的。
关忆北.
2021/12/07
4880
Java中的深浅拷贝
Java 浅拷贝和深拷贝
Java中的对象拷贝(Object Copy)指的是将一个对象的所有属性(成员变量)拷贝到另一个有着相同类类型的对象中去。
用户3467126
2019/09/04
6900
Java 浅拷贝和深拷贝
相关推荐
Java漫谈-深拷贝与浅拷贝
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档