视频内容

computed函数

  • 与Vue2.x中computed配置功能一致

  • 写法

    import {computed} from 'vue'
    
    setup(){
        ...
        //计算属性——简写
        let fullName = computed(()=>{
            return person.firstName + '-' + person.lastName
        })
        //计算属性——完整
        let fullName = computed({
            get(){
                return person.firstName + '-' + person.lastName
            },
            set(value){
                const nameArr = value.split('-')
                person.firstName = nameArr[0]
                person.lastName = nameArr[1]
            }
        })
    }

源码

components\Demo.vue

<template>
    <h1>一个人的信息</h1>

    姓:<input type="text" v-model="person.firstName">
    <br/>
    名:<input type="text" v-model="person.lastName">
    <br/>
    <span>Vue3 姓名:{{ person.fullName }}</span>
    <br/>
    全名: <input type="text" v-model="person.fullName">
    <br/>
    <br/>
    <!-- Vue2 演示-->
    <span>Vue2 姓名:{{ vue2FullName }}</span>
</template>

<script>
    //Vue3中使用 computed 需要引入:
    import {reactive,computed} from 'vue'

    export default {
        name: 'Demo',

        //在Vue3中也可以按照Vue2的套路写,但是不建议这么操作。
        //Vue2写法,不需要引入 computed
        computed:{
            vue2FullName(){
                return this.person.firstName + '-' + this.person.lastName
            }
        },

        setup(){
            //数据
            let person = reactive({
                firstName:'张',
                lastName:'三'
            })

            //计算属性
            //Vue2演示:
            let vue2FullName = computed(()=>{
                return person.firstName + '-' + person.lastName
            })
            //Vue3演示:
            //也可以直接给 persion 追加一个属性:
            //计算属性: 简写(没有考虑计算属性被修改的情况)
            /*person.fullName = computed(()=>{
                return person.firstName + '-' + person.lastName
            })
            */
            //上面∈只读写法,如果还需要可写,则完整写法:
            person.fullName = computed({
                get(){
                    return person.firstName + '-' + person.lastName
                },
                set(value){
                    const nameArr = value.split('-')
                    person.firstName = nameArr[0]
                    person.lastName = nameArr[1]
                }
            })

            //返回一个对象(常用)
            return {
                person,

                vue2FullName
            }
        }
    }
</script>