vue3-10-计算属性以及get跟set

<template>
    <div class=''>
        <h1>计算属性以及get跟set</h1>
        <p>{{ num }}</p>
        <p>{{ dbNum }}</p>
        <button @click="num++"></button>
        <p>{{ objRet.num }}</p>
        <p>{{ dbNum2 }}</p>
        <button @click="objRet.num++"></button>
    </div>
</template>

<script lang='ts' setup>
import { ref, computed, reactive } from 'vue'

let num = ref(20)

// computed 返回值就是计算属性的值,接收返回值之后,可以直接在上面展示
let dbNum = computed(() => {
    return num.value * 2
})

let obj = {
    num: 10
}
let objRet = reactive(obj)
let dbNum2 = computed(() => {
    return objRet.num * 2
})

// get 跟 set
const count = ref(1)
const plusOne = computed({
  get: () => count.value + 1,
  set: (val) => {
    count.value = val - 1
  }
})

plusOne.value = 1
console.log(count.value) // 0
</script>

<style lang='scss' scoped>

</style>
### Vue3计算属性 `get` 和 `set` 方法的使用 在 Vue3计算属性中,可以通过定义 `get` 和 `set` 方法来实现更复杂的逻辑处理。默认情况下,计算属性只提供 `get` 方法用于读取数据并返回结果;如果需要支持修改该计算属性,则需额外定义 `set` 方法。 #### 基本概念 计算属性的核心在于其响应式特性。当依赖的数据发生变化时,计算属性会自动重新求值[^1]。通过显式声明 `get` 和 `set` 方法,开发者能够自定义这些行为: - **`get` 方法**: 负责返回计算后的值,在模板或其他地方访问此计算属性时触发。 - **`set` 方法**: 当尝试给计算属性赋新值时被调用,允许更新原始数据源。 以下是具体示例展示如何在项目中应用这两种方法--- #### 示例代码 下面是一个完整的 HTML 文件例子,演示了如何利用 Vue3 创建具有 `get` 和 `set` 功能的计算属性。 ```html <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Vue3 计算属性 Get/Set</title> <script src="https://unpkg.com/vue@next"></script> </head> <body> <div id="app"> <!-- 显示 fullName --> <p>{{ fullName }}</p> <!-- 修改 firstName 或 lastName 来观察变化 --> First Name: <input v-model="firstName"><br><br> Last Name: <input v-model="lastName"><br><br> <!-- 直接设置 fullName 测试 set 效果 --> Set Full Name: <input v-model="fullName"> </div> <script> const App = { data() { return { firstName: &#39;John&#39;, lastName: &#39;Doe&#39; }; }, computed: { fullName: { // Getter 函数 get() { return `${this.firstName} ${this.lastName}`; }, // Setter 函数 set(newValue) { const parts = newValue.split(&#39; &#39;); this.firstName = parts[0]; this.lastName = parts[1]; } } } }; // 挂载实例到 DOM 上 Vue.createApp(App).mount(&#39;#app&#39;); </script> </body> </html> ``` 在这个案例里: - 用户输入新的全名(如 `"Jane Smith"`),则 `set` 方法会被激活,并解析字符串以同步更新 `firstName` 和 `lastName` 属性[^2]。 - 反之,每当单独调整姓氏或名字字段时,由于绑定了双向绑定指令 (`v-model`) ,视图层也会即时反映最新组合而成的名字[^4]。 --- #### 进阶场景——批量状态管理 除了简单的姓名拼接外,还可以借助类似的机制完成更多复杂操作,比如控制列表项的选择状态等。如下所示的是另一个基于数组筛选的例子: ```javascript export default { data() { return { items: [ { name: &#39;Item A&#39;, selected: false }, { name: &#39;Item B&#39;, selected: true }, { name: &#39;Item C&#39;, selected: false } ] }; }, computed: { allSelected: { get() { return this.items.every(item => item.selected); }, set(value) { this.items.forEach(item => item.selected = value); } } } }; ``` 这里实现了这样一个功能:当所有条目都被选定时,“全部选定”的勾选项也应处于开启状态;反之亦然。同时提供了统一切换的功能[^3]。 --- ### 总结 综上所述,Vue3 提供了一种优雅的方式来构建动态交互界面,其中计算属性扮演着重要角色。它不仅简化了许多重复性的编码工作量,还增强了程序可维护性和性能表现。对于那些既希望保持简洁又追求灵活性的应用开发而言,合理运用好 `get`/`set` 是非常必要的技能之一。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凯小默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值