[Vue]-计算属性

104 阅读1分钟

本文基于: 尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通_哔哩哔哩_bilibili

需求

设置两个输入框,一个负责输入 FirstName, 另一个负责 LastName, 在下方设置一个用于展示 FullName 的标签。

image.png

传统 methods 实现

<div id="root">
        FirstName:<input type="text" v-model="firstName"> <br/><br/>
        LastName:<input type="text" v-model="lastName"> <br/><br/>
        FullName:<span>{{fullName()}}</span>
</div>
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
new Vue({
        el:'#root',
        data:{
                firstName:'张',
                lastName:'三'
        },
        methods: {
                fullName(){
                        console.log('@---fullName')
                        return this.firstName + '-' + this.lastName
                }
        },
})

通过 v-model 实现对 FirstNameLastName 的双向绑定加以 fullName 函数的方式实现功能,步骤相对繁琐且性能不高, Vue 为我们提供了 计算属性 这一更加简便的方法。

计算属性 实现

所谓 计算属性 就是将已定义的属性进行 加工计算 后生成的全新的属性。

<div id="root">
    FirstName:<input type="text" v-model="firstName"> <br/><br/>
    LastName:<input type="text" v-model="lastName"> <br/><br/>
    FullName:<span>{{fullName}}</span> <br/><br/>
</div>
Vue.config.productionTip = false //阻止 vue 在启动时生成生产提示。
const vm = new Vue({
    el:'#root',
    data:{
            firstName:'张',
            lastName:'三',
    },
    computed:{
            fullName:{
                    //fullName 被访问时调用 get
                    get(){
                            console.log('@---get---')
                            return this.firstName + '-' + this.lastName
                    },
                    //fullName 被修改时调用 set
                    set(value){
                            console.log('set',value)
                            const arr = value.split('-')
                            this.firstName = arr[0]
                            this.lastName = arr[1]
                    }
            }
    }
})

由于我们的页面只有两个输入框用以输入 FirstNameLastName ,在不使用 f12 开发者控制台 的情况下是无法直接修改 FullName 的,所以 fullName 内的 set() 函数可以省略不写。 set() 的作用是:在修改 fullName 属性时 firstNamelastName 也会同步改变。

实现效果

image.png

计算属性 的简写

fullName(){
    console.log('@---get---')
    return this.firstName + '-' + this.lastName
}

本小节课程源码: vue_basic/08_计算属性 · Hu_Soking/vue-sgg - 码云 - 开源中国 (gitee.com)