百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Vue3开发极简入门(4):计算属性(vue计算属性怎么用)

zhezhongyun 2025-05-11 03:01 16 浏览

计算属性(computed property)

HTML页面上的类似{{userName}}这样的,就是模板语法,这里面除了显示某个字段以外,也可以使用JavaScript表达式,例如:

结果:{{ eduBg < 99 && eduBg > 0 ? "通过":"未通过" }}

但是Vue是不建议在模板语法中写太多逻辑的,后期维护是问题。

采用计算属性来处理复杂逻辑是Vue推荐的。

<template>
    <div class="applicant">
        姓名:<input type="text" v-model="userName" required>
        学历:<select v-model="eduBg">
            <option v-for="option in eduBgs" v-bind:value="option.value" required>
                {{ option.text }}
            </option>
        </select>
        <button v-bind:disabled="!canSubmit" @click="submit">提交</button>
    </div>
</template>
<script lang='ts' setup name='Applicant'>
import { ref, computed } from 'vue';
let eduBgs = [{ value: 0, text: "请选择" }, { value: 1, text: "博士" }, { value: 2, text: "硕士" }, { value: 3, text: "本科" }, { value: 99, text: "大专" }]

let userName = ref("");
let eduBg = ref(0);

//计算属性
let canSubmit = computed(() => {
    return checkCanSubmit()
})

function checkCanSubmit() {
    return eduBg.value > 0 && userName.value.length > 0
}

function submit() {
    let eduBgText = eduBgs.find(item => item.value === eduBg.value)?.text
    alert(userName.value + " 先生/女士,学历:" + eduBgText + " 已提交")
}
</script>
<style>
.applicant {
    background-color: cornsilk;
    font-size: small;
    color: black;
    padding: 10px 10px 10px 10px;
}

input,
select,
button {
    margin-bottom: 10px;
}

button:disabled {
    background-color: #ccc;
    /* 当按钮被禁用时改变其背景颜色 */
    cursor: not-allowed;
    /* 改变鼠标悬停时的光标样式 */
}
</style>

canSubmit就是计算属性。当其依赖的userName、eduBg发生改变时,canSubmit也会重新计算并更新。

其实计算属性,逻辑也可以写在function中,模板直接调用即可,也能达到相同的效果。

但是相比计算属性,直接用方法是没有缓存的。

假设页面有三处用到canSubmit,如果用function,会计算3次,如果用计算属性,只需1次。

可修改的计算属性

按照上面的写法,如果我们想直接修改计算属性,例如:

canSubmit.value=true

是不行的,会报此属性是只读的。可读可写的写法:

<button @click="forceSubmit">强制默认提交</button>

// 计算属性 可读可写
let canSubmit = computed({
    get() {
        return checkCanSubmit()
    },
    set(newVal) {
        userName.value = "佚名"
        eduBg.value = 99
    }
})

function forceSubmit() {
    canSubmit.value = true
}

相关推荐

不看必后悔!15个三星GoodLock隐藏小技巧~(上)

很多刚用三星手机的星粉们,一定对三星GoodLock这个宝藏App还不是很了解,今天就带大家一起详细去看看GoodLock这个大家族究竟有多少宝藏功能及成员呢?让我们一起来看看吧~由于Good...

惊魂幻象理智值监控WA!大字体+范围提示一目了然

一个WA助你轻松监控大幻象理智值,不再错过恢复时机这个WA用大字体实时同步我们的理智值下面的图标提示恢复宝珠的剩余次数上面的图标高亮则意味着我们在宝珠的恢复范围内我们可以将图标随意移动到适合自己观察的...

盘点十个超炫的jQuery插件(jquery插件是干什么的)

“DevExpress14.2新版发布会”即将推出。心动不如行动,赶快报名吧!我们期待与您相约。今天小编为大家搜罗了十个超酷的jQuery插件,这可以使你的网站界面更加友好。jQuery创造了令人难...

Google官方梳理,Android 多返回栈技术详解

用户通过系统返回按钮导航回去的一组页面,在开发中被称为返回栈(backstack)。多返回栈即一堆"返回栈",对多返回栈的支持是在Navigation2.4.0-alpha0...

说三星手机系统不好用,因为没有玩明白三星,三星Diy功能超强大

都说三星手机系统不好用,其实真正用起来,挺好用的三星手机系统像块没打磨的玉,默认设置是基础款,用着普通。但你要是肯花点时间,它能变得特别顺手。关键就在一个叫GoodLock的工具,它是三星自家出的...

Sam Helper三星手机用户必装神器(三星手机必装app)

SamHelper这款软件集合了三星手机主题工具当前主题o主题路径o主题安装系统设置屏幕模式o状态栏o文件o频段o暗码Lock&LabsGoodLockoGalaxyLa...

外卖套餐搭配的探索和应用(外卖套餐搭配技巧)

本文系外卖美食知识图谱系列的第三篇文章,从技术层面我们会介绍外卖套餐搭配的技术方案,包括离线、实时的套餐搭配的迭代,套餐质量评估方案,同时会介绍套餐搭配的业务应用。1.背景让用户更方便快捷地选购到满...

用几行原生JS就可以实现丝滑的元素过渡效果

作者:ConardLi大家可以看下下面这个应用的页面切换体验,是不是很丝滑~做过体验优化的朋友应该都清楚,如果用原生的CSS或者JS动画去实现,想要实现出类似的效果,不会特别简单,而且也要考...

速腾车主RNS315固件及2016年6月地图升级详细教程

本来打算买个大众原厂的地图卡,后来在网上看其实不需要原厂地图卡也可以升级,于是开始在网上收集资料,开始天真的以为只要有密匙文件修改一下就可以免费升级了,其实最主要的还是破解的固件,不知道为什么,网上找...

学习一个母词act,一次解析一串关联、复合、衍生词族

首先形义解读一下act的原始意象,A是力量与行动的开始C是范围的覆盖T是目标目的的接触与刻度合在一起,行动行为艺术力量的复合行为以下是关于act的复合词、词根词缀衍生词及其变形后的词根衍生词的详细...

优迈系统(一体化控制柜)快车调试(八)

逻辑故障和驱动故障分析段码管上显示警告码和故障码对照表警告码操作模式故障码操作模式或驱动故障AL000EPC(紧急电源管制模式)ER100DTC(门在设定时间内不能关到位)AL001COR(复位模式)...

Layui简单实现左侧菜单和Tab选项卡动态操作

<!DOCTYPEhtml><html><head><metacharset="utf-8">...

码农如何快速打造一个有设计感的网站

像我这样的程序员来说经常被“设计”这个词吓到,因为我是一名程序员而不是设计师,我拥有的是计算机学位证,另外我对ComicSans字体并不介意。(注:ComicSans字体是Win95附带...

vue3 新特性 computed、watch、watchEffect 看完就会

1、watchEffectwatchEffect侦听器是一个副作用函数,不需要指定监听的某个属性,监视的回调中用到哪个属性,就会监听哪个属性,一旦运行就会立即执行。watchEffect与com...

10个冷门但非常实用前端开发者很少用的CSS规则

许多开发者只学了基础——比如修改颜色、设置字体或创建弹性布局——就止步不前。但CSS是一门精深而多用途的语言,掌握后能帮你构建优雅、高效且无障碍的界面。无论你是从零搭建还是微调设计系统,掌握一些高...