关于vue中计算属性computed的详细讲解

 更新时间:2022年07月10日 09:56:21   作者:alical  
computed是vue的配置选项,它的值是一个对象,其中可定义多个计算属性,每个计算属性就是一个函数,下面这篇文章主要给大家介绍了关于vue中计算属性computed的详细讲解,需要的朋友可以参考下

1.定义

computed是vue的计算属性,是根据依赖关系进行缓存的计算,只有在它的相关依赖发生改变时才会进行更新

2.用法

一般情况下,computed默认使用的是getter属性

3.computed的响应式依赖(缓存)

1. computed的每一个计算属性都会被缓存起来,只要计算属性所依赖的属性发生变化,计算属性就会重新执行,视图也会更新。下面代码中,计算属性fullName,它依赖了firstNamelastName这两个属性,只要它们其中一个属性变化,fullName就会重新执行。

2.computed计算属性会被缓存,在下面代码中使用了两次fullName,但在控制台只输出了一次 “这是fullName”。

<template>
  <div>
    <div>
      姓:<input type="text" v-model="firstName" />
    </div>
    <div>
      名:<input type="text" v-model="lastName" />
    </div>
    <!-- 调用两次fullName -->
    <div>姓名:{{ fullName }}</div>
    <div>姓名:{{ fullName }}</div>
  </div>
</template>
<script>
export default {
  data() {
    return {
      firstName: "张",
      lastName: "三",
    };
  },
  computed: {
    fullName() {
        console.log("这是fullName");
        return this.firstName + this.lastName;
    }
  }
};
</script>

4.应用场景

当一个数据受多个数据影响时,可以使用computed

1.本组件计算

2.计算props的值

3.计算vuex的state或者getters值的变化

附:计算属性的 getter 与 setter

默认情况下,计算属性函数是一个 getter 函数,如果计算属性只有 get 需求,则可以简写

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <div>
            <!-- <input type="checkbox" v-model='isAll'> -->
            <input type="text" v-model='n'>
            +
            <input type="text" v-model='m'>
            =
            <input type="text" v-model='x'>
        </div>
        {{o}}
    </div>
    <script>
        let vm = new Vue({
            el: '#app',
            data: {
                is: true,
                obj: {
                    // a: 1
                    a: 1
                },
                n: '',
                m: ''
            },
            computed: {
                //计算属性在这里写的属性不要在data重复写 跟data中的数据一样可以通过vm.获取或者修改
                isAll: {
                    get() {
                        //只要获取这个属性就会触发get这个函数
                        console.log(1);
                        return this.is
                    },
                    set(val) {
                        // val 设置的值
                        this.isAll = this.is
                    }
                },
                x: {
                    // 只要是依赖的值(必须有setter和getter响应的数据)发生改变了就会重新计算自己的值
                    get() {
                        return Number(this.n) + Number(this.m)
                    },
                    // set(){
                    //     Number(this.n) + Number(this.m)
                    // }

                },
                o: {
                    get() {
                        //如果没有在data的obj中初始化 就没有getter和setter响应 当改变this.obj.a的时候不会影响 数据o
                        return this.obj.a + 1
                    }
                },
                ss: {
                    get() { },
                    //计算属性必须要有get可以没有set
                    //v-model绑定的计算属性有get和set
                    //其他的一般只有get
                    set() { }
                },
                xx() {
                    //如果这个计算属性只有get可以写成一个函数的形式
                },
                bb() {
                    //第一次获取的时候依赖值没有发生改变但是也会默认执行一次
                    // 必须要有return  不支持异步
                    let a = 'kk';
                    setTimeout(() => {
                        a = this.aa + a
                    }, 1000)
                    console.log(a);
                    
                    return this.aa
                }
            }
        })
    </script>
</body>

</html>

参考:https://cn.vuejs.org/v2/guide/computed.html

           https://segmentfault.com/a/110000012948175

总结

到此这篇关于vue中计算属性computed的详细讲解的文章就介绍到这了,更多相关vue计算属性computed内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue Router的手写实现方法实现

    Vue Router的手写实现方法实现

    这篇文章主要介绍了Vue Router的手写实现方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Vue文件配置全局变量的实例

    Vue文件配置全局变量的实例

    今天小编就为大家分享一篇Vue文件配置全局变量的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • vue代理和跨域问题的解决

    vue代理和跨域问题的解决

    这篇文章主要介绍了vue代理和跨域问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Vue使用vux-ui自定义表单验证遇到的问题及解决方法

    Vue使用vux-ui自定义表单验证遇到的问题及解决方法

    这篇文章主要介绍了Vue使用vux-ui自定义表单验证遇到的问题及解决方法,需要的朋友可以参考下
    2018-05-05
  • vue使用async/await来实现同步和异步的案例分享

    vue使用async/await来实现同步和异步的案例分享

    近期项目中大量使用async,从服务器获取数据,解决一些并发传参问题,代码很简单,在此也看了一些博客,现在async/await已经大范围让使用,所以本文给大家介绍一下vue使用async/await来实现同步和异步的案例,需要的朋友可以参考下
    2024-01-01
  • Vue组件传值异步问题子组件拿到数据较慢解决

    Vue组件传值异步问题子组件拿到数据较慢解决

    这篇文章主要为大家介绍了Vue组件传值异步中子组件拿到数据较慢的问题解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Vue自定义指令实现对数字进行千分位分隔

    Vue自定义指令实现对数字进行千分位分隔

    对数字进行千分位分隔后展示应该是大部分同学都做过的功能了吧,常规的做法通常是编写一个工具函数来对数据进行转换,那么我们可不可以通过vue指令来实现这一功能呢,下面我们就来探索一下呢
    2024-02-02
  • element-plus的自动导入和按需导入方式详解

    element-plus的自动导入和按需导入方式详解

    之前使用 ElementPlus 做项目的时候,由于不会使用按需引入耽误了不少时间,这篇文章主要给大家介绍了关于element-plus自动导入和按需导入的相关资料,需要的朋友可以参考下
    2022-08-08
  • Vue中函数防抖节流的理解及应用实现

    Vue中函数防抖节流的理解及应用实现

    这篇文章主要介绍了Vue中函数防抖节流的理解及应用实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • vue开发设计分支切换与cleanup实例详解

    vue开发设计分支切换与cleanup实例详解

    这篇文章主要为大家介绍了vue开发设计分支切换与cleanup实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11

最新评论