Vue-Vue的计算属性(computed)

1.理解

计算属性:

1.定义:要用的属性不存在,要通过已有属性计算得来

2.原理:底层接住了Object.defineproperty方法提供的getter和setter

3.get函数什么时候执行?

  • 初次读取会执行一次

  • 当以来的数据发生变化时会被再次调用

    .

4.优势:与methods相比,内部有缓存机制(复用).效率更高

5.备注:

​ 1.计算属性最终会出现在vm上,直接读取即可

​ 2.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时以来的数据发生变化

2.案例

假设1我们需要实现一个“填入姓和名,自动生成姓名”的效果,如下图
在这里插入图片描述

我们可以用修饰符**{{}}methods、和计算属性computed**三种方式来实现这个案例

1.修饰符{{}}

优点:简单方便

缺点:对于复杂的表示式,会造成代码不简洁

<div id="app">
        姓:<input type="text" v-model="firstName"><br><br>
        名:<input type="text" v-model="lastName"><br><br>
        全名:{{firstName}}+{{lastName}}
    </div>
 const vm = new Vue({
        el:'#app',
        data:{
            firstName:'',
            lastName:'',
            
        }
    })

通过v-model双向绑定,我们可以在姓名输入框输入相应的值,全名使用通配符+表达式,实现全名的渲染
在这里插入图片描述

2.methods函数

优点:可以处理复杂的逻辑判断,代码量不会繁琐

缺点:与计算属性相比,函数可能会不必要的执行

<div id="app">
        姓:<input type="text" v-model="firstName"><br><br>
        名:<input type="text" v-model="lastName"><br><br>
        全名:{{showFullName()}}
    </div>
 const vm = new Vue({
        el:'#app',
        data:{
            firstName:'',
            lastName:'',
            
        },
        methods:{
            showFullName(){
                return this.firstName+'-'+this.lastName
            }
        }
    })

通过修饰符+函数,我们可以实现复杂的逻辑判断,函数内可以进行很多的操作
在这里插入图片描述

3.计算属性computed

优点:精准高效,可以准确的观测到数据的变化

 <div id="app">
        姓:<input type="text" v-model="firstName"><br><br>
        名:<input type="text" v-model="lastName"><br><br>
        全名:{{fullName}}
    </div>
const vm = new Vue({
        el:'#app',
        data:{
            firstName:'',
            lastName:'',
            
        },
        computed:{
            fullName:{
                get(){
                    console.log('get被调用了');
                    return this.firstName+'-'+this.lastName
                },
                set(value){
                    const arr = value.split('-')
                    this.firstName =arr[0]
                    this.lastName = arr[1]
                }
            }
        }
    })

在这里插入图片描述

以上案例也可以实现,但是我们使用计算属性的优点是什么呢,我们为什么要选择用似乎更加麻烦的计算属性呢,我们先来看它的get函数

 get(){
                    console.log('get被调用了');
                    return this.firstName+'-'+this.lastName
                },

我们在之前就说到,计算属性含有缓存机制,也就是说,get函数只在初次读取fullName时或者所依赖的数据发生变化时,才进行调用

比方说

 <div id="app">
        姓:<input type="text" v-model="firstName"><br><br>
        名:<input type="text" v-model="lastName"><br><br>
        全名:{{fullName}}
        全名:{{fullName}}
        全名:{{fullName}}
        全名:{{fullName}}
    </div>

当我们多次调用fullName,那么我们的get函数会不会多次调用呢?
在这里插入图片描述

我们可以发现,当我们修改姓名的值时,get函数只执行了一次,这就是计算属性特有的缓存机制,即只有以下情况get才会调用,这样可以大大的提高执行效率

1.初次读取fullName

2.依赖的数据发生变化

我们再来看看set函数

当我们需要修改fullName的值时,我们需要set函数

set(value){
    				console.log("set被调用了");
                    const arr = value.split('-')
                    this.firstName =arr[0]
                    this.lastName = arr[1]
                }

我们先不使用set函数,看看我们是否可以修改fullName

当我们在控制台修改fullName的值时
在这里插入图片描述

页面没有任何变化,这是为什么呢?

因为fullName其实是由firstName和lastName组合而成的,我们要想修改fullName,就必须修改firstName和lastName,而修改它们我们就要用到set函数

我们现在使用set函数并修改fullName的值
在这里插入图片描述

在这里插入图片描述

我们发现页面也响应的改变了,这就是计算属性中的set的用法

set什么时候调用呢?

当修改计算属性时,set函数就会被调用

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vue-async-computed.js是一个用于Vue.js的库,它扩展了Vue中的计算属性功能,使之可以支持异步数据获取和计算。 Vue.js计算属性是在模板中根据数据的变化实时计算出新的结果,并实时更新到视图中。然而,在某些情况下,数据的获取和计算可能会涉及异步操作,如从服务器获取数据或处理复杂的计算逻辑。此时,普通的计算属性就不再适用,需要使用异步计算属性才能处理这样的情况。 异步计算属性提供了一个方便的方式来处理异步数据的获取和计算。它的用法类似于普通的计算属性,但是需要使用一个异步函数来定义计算属性的逻辑。这个异步函数可以返回一个Promise对象,用于表示异步操作的结果。 在异步函数中,我们可以执行异步操作,如发送网络请求、读取本地存储等。当异步操作完成后,我们可以通过Promise的resolve方法返回计算属性的结果。在模板中使用异步计算属性时,Vue会自动等待异步操作完成并获取到计算属性的结果,然后更新视图中相应的内容。 通过使用vue-async-computed.js,我们可以轻松地处理复杂的异步计算逻辑,如缓存异步计算结果、处理异步错误等。它的简单易用和强大的功能使得我们可以更加方便地开发处理异步数据的应用程序。无论是获取远程数据还是处理复杂的计算逻辑,vue-async-computed.js都可以帮助我们减少工作量,提高开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值