Vue2.0——computed 计算属性区域

本文详细介绍了Vue2.0中的computed计算属性,包括其作为变量声明的特性,能够缓存值并默认为只读。同时,对比了computed与methods的区别,指出计算属性依赖于Vue的底层监听器,若变量未改变则返回旧值,节省性能。此外,还探讨了如何在计算属性中使用setter来响应数据变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概念

计算属性区域
类似变量的声明 监听变量 可以缓存之前的变量值
默认只能读取 readonly
使用get set 访问器 写的值 是可读可写的

computed里面不是方法,用的时候都是属性赋值【同监听器】。使用的时候都是以变量形式绑定。
(和变量一样,只不过里面可以写复杂的逻辑代码)

<template>
<div id="page">
    {{msg.split('').reverse().join("")}}
    <br>
    {{reverseStr}}
</div>
</template>
<script>
export default{
    name:"page",
    data(){
        return {
            msg:"Hello!"
        }
    },
    mounted(){
        //按属性方式调用computed
        console.log(this.reverseStr);
        //默认计算属性的方法只存在getter 下面写法会报错
        this.reverseStr='你好';
    },
    computed:{
        //默认写的格式
        //下面这个简单模式 类似getter访问器
        reverseStr(){
            //this 指向vm实例 组件对象
            //逻辑代码进行属性操作
            let newStr=this.msg.split("").reverse().join("");
            return newStr;
        },
    }
}
</script>

在这里插入图片描述
默认只能读取 readonly!
在这里插入图片描述

二、和methods区别

1.计算属性 和 函数调用 两个返回的结果是一致的

<template>
<div id="page">
    {{reverseStr}}
    {{getMsg()}}
</div>
</template>
<script>
export default{
    name:"page",
    data(){
        return {
            msg:"Hello!"
        }
    },
    methods:{
        getMsg(){
            let newStr=this.msg.split("").reverse().join("");
            return newStr;
        }
    },
    computed:{
        reverseStr(){
            //this 指向vm实例 组件对象
            //逻辑代码进行属性操作
            let newStr=this.msg.split("").reverse().join("");
            return newStr;
        },
    }
}

在这里插入图片描述
区别
计算属性以来的是vue的底层监听器 getter setter 【数据双向】
如果变量没有被修改 计算属性返回的是之前的旧值(缓存值) ,不会重新进行逻辑运算

3.计算属性来写setter访问器

计算属性默认只有 getter,不过在需要时你也可以提供一个 setter

eg1:

    {{work}}
    <input type="text" v-model="work">

<script>
export default{
    name:"page",
    data(){
        return {
            job:"学生",
        }
    },
    computed:{
        //默认写的格式
        //下面这个简单模式 类似getter访问器
        reverseStr(){
            //this 指向vm实例 组件对象
            //逻辑代码进行属性操作
            let newStr=this.msg.split("").reverse().join("");
            return newStr;
        },
        
        //计算属性配置getter setter 访问器
        work:{
            get(){
                return this.job;
            },
            set(value){
                this.job=value;
            }
        }
    }
}
</script>

当input框中的work值发生变化后,会调用setter,接着重新执行getter

eg2:

<template>
<div id="compon">
    组件
    {{msg}}
    <button @click="changeMsg">修改值</button>
    <button @click="changeCount">count++</button>
    {{count}}
</div>
</template>
<script>
//每个组件都存在自己的生命周期
//写的时候得常规方法:
export default{
    name:"compon",
    data() {
        return {
            msg:"你好",
            num:0,
        }
    },
    methods: {
        changeMsg(){
            this.msg="Hello!";
        },
        changeCount(){
            this.count++;
        }
    },
    computed:{
        //计算属性区域(不用写入data)
        //使用get set 访问器  写的值  是可读可写的
        count:{
            get(){
                return this.num;
            },
            set(vm){
                this.num=vm;
            },
        }
    },
    watch:{
        //监听
        count(newValue,oldValue){
            console.log(newValue, oldValue);
        },
    }
}
</script>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

致可乐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值