Vue2&3的计算属性(computed)

Vue2&3的计算属性(computed)

Vue2的计算属性

  • 原理:data中的属性通过计算得到新的属性,称为计算属性(computed)。
  • computed 具有 getter 和 setter 属性
    • getter 属性在使用时分别有两次调用:
      • 第一次:初始化,初次访问该属性
      • 第二次:当 computed 中的数据发生变化时调用
    • setter 属性的调用:
      • 当 computed 属性被修改时调用
    • 注意事项:
      • setter 属性本身不会修改属性的值,只用于修改属性本身,而 computed 属性的值被修改并不会更新setter 属性的值。
      • getter 和 setter 属性不能使用箭头函数,箭头函数中的this不是指向vm,而是window。
  • computed 分别有两种写法:
    • 简写形式:computed : { 属性名(){ ...... } },不使用setter属性时,才能使用
    • 完整形式:computed : { 属性名 : { get(){ ...... }, set(value){ ...... } } }
// App.vue
<template>
    姓名:<input type="text" v-model="username"><br>
    反转:<input type="text" v-model="reversedName">
</template>

<script>
    export default {
        name : 'App',
        data(){
            return {
                username : ''
            }
        },
        computed : {
            // 完整写法
            reversedName : {
                get(){
                    return this.username.split('').reverse().join('')
                },
                set(value){
                    this.username = value.split('').reverse().join('')
                }
            }
            
            // 简写形式
            reversedName(){
                return this.username.split('').reverse().join('')
            }
        }
    }
</script>

Vue3的计算属性

  • Vue3的 computed 属性是一个组合式API,并且可以使用箭头函数
  • 使用前需要先引入:import { computed } from 'vue'
  • computed 属性的两种写法:
    • 简写形式:computed(() => { ...... }),不使用setter属性时,才能使用
    • 完整形式:computed({get(){ ...... }, set(value){ ...... }})
// App.vue
<template>
    姓名:<input type="text" v-model="user.name"><br>
    反转:<input type="text" v-model="reversedName">
</template>

<script>
    import { reactive, computed } from 'vue'
    export default {
        name : 'App',
        setup(){
            let user = reactive({
                name : ''
            })
            // 简写写法
            let reversedName = computed(() => {
                return user.name.split('').reverse().join('')
            })

            // 完整写法
            let reversedName = computed({
                get(){
                    return user.name.split('').reverse().join('')
                },
                set(value){
                    user.name = value.split('').reverse().join('')
                }
            })

            return {user, reversedName}
        }
    }
</script>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值