广告
返回顶部
首页 > 资讯 > 精选 >Vue中的计算属性与监听属性怎么用
  • 676
分享到

Vue中的计算属性与监听属性怎么用

2023-06-29 12:06:58 676人浏览 薄情痞子
摘要

今天小编给大家分享一下Vue中的计算属性与监听属性怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、为什么要使用计算属

今天小编给大家分享一下Vue中的计算属性与监听属性怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、为什么要使用计算属性

什么是计算属性

计算属性:可以理解为能够在里面写一些计算逻辑的属性。具有如下的作用:

  • 减少模板中的计算逻辑。

  • 数据缓存。当我们的数据没有变化的时候,不会再次执行计算的过程。

  • 依赖固定的数据类型(响应式数据),不能是普通的传入的一个全局数据。

在数据量比较大的时候,计算属性可以帮助我们提高性能,因为计算属性只会在数据变化的时候才会计算。

在讲解计算属性之前先来看下面的一个例子:

需求:外卖套餐A每份15元,客户点了3份,总价打八折,配送费5元,要求在界面显示总价,代码如下:

<template>    <div>        <div>您购买了{{info.name}}共{{info.count}}份</div>        <h2>总价:{{info.count*info.price*info.sale+info.freight}}元</h2>    </div></template><script>export default {    name:'Test',    data(){        return{            info:{                userId:1,                price:15,                name:'套餐A',                count:3,                sale:0.8,                freight:5            }        }    }}</script>

界面运行效果:

Vue中的计算属性与监听属性怎么用

看了上面的例子,可能有人会问:使用这种方式已经实现了需求,那为什么还要使用计算属性呢?我们知道,vue中模板内的表达式非常便利,设计的初衷是用于简单运算的。如果在模板中放入太多的逻辑会让模板过重而且难以维护,看上面的代码:

<h2>总价:{{info.count*info.price*info.sale+info.freight}}元</h2>

在这段代码中,模板不在是简单的声明式逻辑,而是复杂的逻辑计算,如果想要在多处引用总价的时候,就会难以维护。所以,对于任何复杂的逻辑,都应当使用计算属性。

看下面使用计算属性的例子:

<template>    <div>        <h2>计算属性</h2>        <div>您购买了{{info.name}}共{{info.count}}份</div>        <!--使用计算属性:和绑定普通属性一样-->        <h2>总价:{{totalPrice}}元</h2>    </div></template><script>export default {    name:'ComputedDemo',    data(){        return{            info:{                userId:1,                price:15,                name:'套餐A',                count:3,                sale:0.8,                freight:5            }        }    },    computed:{        // 定义计算属性totalPrice        totalPrice:function(){            return this.info.count*this.info.price*this.info.sale+this.info.freight        }    }}</script>

界面显示效果:

Vue中的计算属性与监听属性怎么用

注意:计算属性是一个属性,不是方法,不能写在methods中,放在computed属性里面。

上面计算属性的写法也可以使用es6的写法:

// 使用ES6写法totalPrice(){    return this.info.count*this.info.price*this.info.sale+this.info.freight}

二、计算属性和方法的区别

1、区别

上面的例子除了使用计算属性,还可以使用方法实现:

<template>    <div>        <h2>计算属性</h2>        <div>您购买了{{info.name}}共{{info.count}}份</div>        <!--使用计算属性:和绑定普通属性一样-->        <h2>使用计算属性获取总价:{{totalPrice}}元</h2>        <h2>使用方法获取总价:{{getTotalPrice()}}元</h2>    </div></template><script>export default {    name:'ComputedDemo',    data(){        return{            info:{                userId:1,                price:15,                name:'套餐A',                count:3,                sale:0.8,                freight:5            }        }    },    computed:{        // 定义计算属性totalPrice        // totalPrice:function(){        //     return this.info.count*this.info.price*this.info.sale+this.info.freight;        // }        // 使用ES6写法        totalPrice(){            return this.info.count*this.info.price*this.info.sale+this.info.freight;        }    },    methods:{        getTotalPrice(){            return this.info.count*this.info.price*this.info.sale+this.info.freight;        }    }}</script>

界面显示效果:

Vue中的计算属性与监听属性怎么用

通过上面的例子可以看出:计算属性和方法实现的最终效果是相同的。那么计算属性和方法有什么区别呢?计算属性是基于它们的响应式依赖进行缓存的,只有在响应式依赖发生改变时才会重新求值。这就意味着只要响应式依赖没有发生改变,多次访问计算属性会立即返回之前的计算结果,而不必再次执行计算。相比之下,调用方法总会再次执行函数。总价计算属性和方法的区别如下:

  • 计算属性在依赖发生改变时会自动改变,而方法在依赖发生改变时需要触发才会改变。

  • 计算属性在依赖发生改变时才会重新计算,而方法在每次调用时都会执行。

看下面的例子:

<template>    <div>        <h2>计算属性</h2>        <!-- <div>您购买了{{info.name}}共{{info.count}}份</div> -->        <!-- 使用计算属性:和绑定普通属性一样 -->        您购买了<input type="text" v-model="info.name" />        数量<input type="text" v-model="info.count" />                <h2>使用计算属性获取总价:{{totalPrice}}元</h2>        <button @click="getTotalPrice">计算属性</button>        <h2>使用方法获取总价:{{data}}元</h2>    </div></template><script>export default {    name:'ComputedDemo',    data(){        return{            info:{                userId:1,                price:15,                name:'套餐A',                count:3,                sale:0.8,                freight:5            },            data:0        }    },    computed:{        // 定义计算属性totalPrice        // totalPrice:function(){        //     return this.info.count*this.info.price*this.info.sale+this.info.freight;        // }        // 使用ES6写法        totalPrice(){            console.log('计算属性');            return this.info.count*this.info.price*this.info.sale+this.info.freight;        }    },    methods:{        getTotalPrice(){            console.log('方法');            this.data= this.info.count*this.info.price*this.info.sale+this.info.freight;        }    }}</script>

当依赖发生改变时会多次打印“计算属性”,而方法需要在点击按钮的时候才会发生改变。依赖不发生改变时点击按钮,也会打印“方法”。如下图所示:

Vue中的计算属性与监听属性怎么用

2、计算属性使用场景

假如我们有一个性能开销比较大的计算属性A,它需要遍历一个巨大的数组并做大量的计算,然后我们可能有其他的计算属性依赖于计算属性A。如果不使用计算属性,那么将不可避免的多次进行计算,会消耗很大的性能,这种情况下就需要使用计算属性。

三、修改计算属性的值

在上面的例子中都是使用的获取后的计算属性的值,那么如何修改计算属性的值呢?看下面的例子:

<template>    <div>        <h2>修改计算属性</h2>        <h3>num:{{num}}</h3>        <h3>计算属性num2:{{num2}}</h3>        <button @click="change">改变计算属性的值</button>    </div></template><script>export default {    name:'ComputedDemo2',    data(){        return{            num:100        }    },    computed:{         num2(){             return this.num-10;         }    },    methods:{        change(){            this.num2=60;        }    }}</script>

效果:

Vue中的计算属性与监听属性怎么用

这时会发现直接修改计算属性的值报错了,因为不能直接修改计算属性的值,如果要修改计算属性的值,需要修改其依赖项的值,看下面的代码:

<template>    <div>        <h2>修改计算属性</h2>        <h3>num:{{num}}</h3>        <h3>计算属性num2:{{num2}}</h3>        <button @click="change">改变计算属性的值</button>    </div></template><script>import { get } from 'Http';export default {    name:'ComputedDemo2',    data(){        return{            num:100        }    },    computed:{         num2:{             // 当计算属性要修改时先触发set方法             // 读取当前计算属性中的值,get方法可以隐藏,默认进入的是get方法             get:function(){                return this.num-10;             },             set:function(val){                 this.num=val;             }         }    },    methods:{        change(){            // 计算属性不能直接修改            this.num2=60;        }    }}</script>

修改前的效果:

Vue中的计算属性与监听属性怎么用

修改后的效果:

Vue中的计算属性与监听属性怎么用

总结

计算属性的值不能修改,如果要修改计算属性的值,要通过计算属性里面的set方法修改其依赖项的值才能修改计算属性的值。

四、监听属性

监听属性(watch)是用来监听data中的数据是否发生变化,一般是监听data中的某个属性。

  • 更加灵活、通用的api

  • watch中可以执行任何逻辑,如函数节流,ajax异步获取数据,甚至操作DOM。

1、监听普通属性

看下面的代码:

<template>    <div>        <h2>监听属性</h2>        姓名:<input type="text" v-model="userName"/>        <h2>{{userName}}</h2>        年龄:<input type="text" v-model="age"/>        <h2>{{age}}</h2>    </div></template><script>export default {    name:'watchDemo',    data(){        return{           userName:"abc",           age:23        }    },    methods:{        change(){        }    },    watch:{        // 监听userName的变化        // 有两个参数,newValue表示变化后的值,oldValue表示变化前的值        userName:function(newValue,oldValue){            console.log('修改前的值:'+oldValue);            console.log('修改后的值:'+newValue);        },        // 监听age的变化        age:function(newValue,oldValue){            console.log('修改前的值:'+oldValue);            console.log('修改后的值:'+newValue);        }    }}</script>

界面效果:

Vue中的计算属性与监听属性怎么用

2、监听属性和计算属性的区别

监听属性和计算属性的区别主要有下面几点:

计算属性性能更优。一个监听属性只能监听一个属性的变化,如果要同时监听多个,就要写多个监听属性,而计算属性可以同时监听多个数据的变化。监听属性可以获取改变之前的属性值。计算属性能做的,watch都能做,反之则不行。能用计算属性尽量用计算属性。

需求:userName或age改变的时候打印出当前的userName和age值。

用监听属性实现:

<template>    <div>        <h2>监听属性</h2>        姓名:<input type="text" v-model="userName"/>        <h2>{{userName}}</h2>        年龄:<input type="text" v-model="age"/>        <h2>{{age}}</h2>        <!--打印userName和age的值-->        <h2>{{info}}</h2>    </div></template><script>export default {    name:'watchDemo',    data(){        return{           userName:"abc",           age:23,           info:''        }    },    methods:{        change(){        }    },    watch:{        // 监听userName的变化        // 有两个参数,newValue表示变化后的值,oldValue表示变化前的值        userName:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        },        // 监听age的变化        age:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        }    }}</script>

如果要实现上述的需求,则需要对userName和age都进行监听,监听属性里面的代码都是重复的,如果有多个,那么就要写多个监听属性。在看计算属性:

<template>    <div>        <h2>监听属性</h2>        姓名:<input type="text" v-model="userName"/>        <h2>{{userName}}</h2>        年龄:<input type="text" v-model="age"/>        <h2>{{age}}</h2>        <!--打印userName和age的值-->        <!-- <h2>{{info}}</h2> -->        <!--使用计算属性-->        <h2>{{getUserInfo}}</h2>    </div></template><script>export default {    name:'watchDemo',    data(){        return{           userName:"abc",           age:23,           info:''        }    },    methods:{        change(){        }    },    // watch:{    //     // 监听userName的变化    //     // 有两个参数,newValue表示变化后的值,oldValue表示变化前的值    //     userName:function(newValue,oldValue){    //         // console.log('修改前的值:'+oldValue);    //         // console.log('修改后的值:'+newValue);    //         this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;    //     },    //     // 监听age的变化    //     age:function(newValue,oldValue){    //         // console.log('修改前的值:'+oldValue);    //         // console.log('修改后的值:'+newValue);    //         this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;    //     }    // }    computed:{        getUserInfo(){            return '我的姓名:'+ this.userName+',年龄:'+this.age;        }    }}</script>

如果使用计算属性则只需要写一次就可以实现上面的需求了。

3、监听复杂对象

上面的例子中是监听的普通属性,那么如何监听对象里面的属性呢?看下面的代码:

<template>    <div>        <h2>监听属性</h2>        姓名:<input type="text" v-model="userName"/>        <h2>{{userName}}</h2>        年龄:<input type="text" v-model="age"/>        <h2>{{age}}</h2>        <!--打印userName和age的值-->        <!-- <h2>{{info}}</h2> -->        <!--使用计算属性-->        <h2>{{getUserInfo}}</h2>        <!--监听对象属性-->        <h2>监听对象属性</h2>        姓名:<input type="text" v-model="obj.name"/>        <h2>{{obj.name}}</h2>    </div></template><script>export default {    name:'watchDemo',    data(){        return{           userName:"abc",           age:23,           info:'',           // 对象           obj:{               name:'123'           }        }    },    methods:{        change(){        }    },    watch:{        // 监听userName的变化        // 有两个参数,newValue表示变化后的值,oldValue表示变化前的值        userName:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        },        // 监听age的变化        age:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        },        // 监听对象中属性的变化        'obj.name':function(newValue,oldValue){            console.log('修改前的值:'+oldValue);            console.log('修改后的值:'+newValue);        }    },    computed:{        getUserInfo(){            return '我的姓名:'+ this.userName+',年龄:'+this.age;        }    }}</script>

效果:

Vue中的计算属性与监听属性怎么用

能不能执行监听对象呢?答案是可以的,看下面代码:

<template>    <div>        <h2>监听属性</h2>        姓名:<input type="text" v-model="userName"/>        <h2>{{userName}}</h2>        年龄:<input type="text" v-model="age"/>        <h2>{{age}}</h2>        <!--打印userName和age的值-->        <!-- <h2>{{info}}</h2> -->        <!--使用计算属性-->        <h2>{{getUserInfo}}</h2>        <!--监听对象属性-->        <h2>监听对象属性</h2>        姓名:<input type="text" v-model="obj.name"/>        <h2>{{obj.name}}</h2>        <!--监听对象-->        <h2>监听对象</h2>        姓名:<input type="text" v-model="obj.name"/>        <h2>{{obj.name}}</h2>    </div></template><script>export default {    name:'watchDemo',    data(){        return{           userName:"abc",           age:23,           info:'',           // 对象           obj:{               name:'123'           }        }    },    methods:{        change(){        }    },    watch:{        // 监听userName的变化        // 有两个参数,newValue表示变化后的值,oldValue表示变化前的值        userName:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        },        // 监听age的变化        age:function(newValue,oldValue){            // console.log('修改前的值:'+oldValue);            // console.log('修改后的值:'+newValue);            this.info= '我的姓名:'+ this.userName+',年龄:'+this.age;        },        // 监听对象中属性的变化        // 'obj.name':function(newValue,oldValue){        //     console.log('修改前的值:'+oldValue);        //     console.log('修改后的值:'+newValue);        // }        // 直接监听对象        obj:{            // handler表示默认执行的函数            handler(newValue,oldValue){                console.log('修改前的值:')                console.log(oldValue);                console.log('修改后的值:');                console.log(newValue);            },            // 表示深度监听             // true:表示handler函数会执行            // false:表示handler函数不会执行            deep:true        }    },    computed:{        getUserInfo(){            return '我的姓名:'+ this.userName+',年龄:'+this.age;        }    }}</script>

效果:

Vue中的计算属性与监听属性怎么用

以上就是“Vue中的计算属性与监听属性怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Vue中的计算属性与监听属性怎么用

本文链接: https://www.lsjlt.com/news/324805.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue中的计算属性与监听属性怎么用
    今天小编给大家分享一下Vue中的计算属性与监听属性怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、为什么要使用计算属...
    99+
    2023-06-29
  • Vue中的计算属性与监听属性
    目录一、为什么要使用计算属性什么是计算属性二、计算属性和方法的区别1、区别2、计算属性使用场景三、修改计算属性的值总结四、监听属性1、监听普通属性2、监听属性和计算属性的区别3、监听...
    99+
    2022-11-13
  • Vue监听属性和计算属性
    目录一、watch监听属性 1.购物车 2.全选与取消全选 二、计算属性 1.computed 2.methods 3.setter 一、watch监听属性 这个属性用来监视某个数...
    99+
    2022-11-12
  • Vue监听属性和计算属性怎么使用
    这篇文章主要讲解了“Vue监听属性和计算属性怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue监听属性和计算属性怎么使用”吧!一、watch监听属性这个属性用来监视某个数据的变化,...
    99+
    2023-06-25
  • JavaScript计算属性与监视(侦听)属性的使用
    监视属性(watch)watch监视(侦听)器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。监视的两种方法通过new Vue时传入watch配置:<div id="root"> <i...
    99+
    2023-05-14
    javascript
  • 关于Vue中的计算属性和监听属性详解
    目录一、computed计算属性(1)计算属性的缓存(2)计算属性的setter二、watch监听属性一、computed计算属性 Vue.js模板内的表达式非常便利,但是设计它们的...
    99+
    2023-05-20
    Vue 计算属性 Vue 监听属性
  • Vue计算属性与监视(侦听)属性的使用深度学习
    目录计算属性(computed)监视属性(watch)监视的两种方法immediate选项深度监视计算属性(computed) 计算属性指的是通过一系列运算之后,最终得到一个值。这个...
    99+
    2022-11-13
    vue计算属性和侦听属性 vue计算属性 vue监视属性
  • JavaScript计算属性与监视属性怎么使用
    本篇内容主要讲解“JavaScript计算属性与监视属性怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript计算属性与监视属性怎么使用”吧!计算属性(computed)计算...
    99+
    2023-07-04
  • Vue中computed(计算属性)和watch(监听属性)的用法及区别说明
    目录计算属性computed侦听属性watch计算属性computed 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持异步,当computed内有异步操作时无效,无法监听数...
    99+
    2022-11-13
  • Vue计算属性与监视属性详细分析使用
    目录计算属性(computed)监视属性(watch)监视的两种方法immediate选项深度监视计算属性(computed) 计算属性指的是通过一系列运算之后,最终得到一个值。这个...
    99+
    2022-11-13
    Vue计算属性与监视属性 Vue计算属性 Vue监视属性
  • 简单聊聊Vue中的计算属性和属性侦听
    目录1. 计算属性语法:  1.简写方式:语法:  2.完整写法: 2. 监视(侦听)属性 1. 监视属性watch:2. 深度监视3. 区别和原则总结1. 计算...
    99+
    2022-11-12
  • vue怎么使用watch监听属性
    这篇文章主要介绍了vue怎么使用watch监听属性的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue怎么使用watch监听属性文章都会有所收获,下面我们一起来看看吧。基本用法Vue watch最重要的使用场景...
    99+
    2023-06-30
  • Vue计算属性与监视属性实现方法详解
    目录一、计算属性1、插值语法实现2、通过方法实现3、通过计算属性二、监视属性三、深度监视一、计算属性 在开发中,可以有这样的需求,在属性(date)中,有fistName和lastN...
    99+
    2022-11-13
  • Vue中计算属性和侦听器怎么使用
    本篇内容主要讲解“Vue中计算属性和侦听器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中计算属性和侦听器怎么使用”吧!在Vue中通常我们会在模板绑定表达式,模板是用来描述视图结构...
    99+
    2023-06-03
  • Vue中监视属性和计算属性的区别是什么
    这篇文章主要讲解了“Vue中监视属性和计算属性的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue中监视属性和计算属性的区别是什么”吧!计算属性顾名思义,计算属性就是计算出来的属...
    99+
    2023-07-04
  • Vue中监视属性和计算属性区别解析
    目录计算属性需求使用watch实现准备工作测试测试在computed当中书写总结计算属性 顾名思义,计算属性就是计算出来的属性,英文名儿computed这里要和data和method...
    99+
    2022-11-13
    vue监视属性 vue计算属性
  • 聊聊Vue中的计算属性、方法与侦听器
    也就是说,当计算属性依赖的数据发生改变时,它会重新计算;若没有变化时,则不计算,会一直使用上一次计算的结果(这样也就提高了一些性能)。在我们的代码中,当 firstName 或 lastName 改变时,fullName 会重新计算,不变时...
    99+
    2023-05-14
    前端 JavaScript Vue.js
  • Vue中的 watch监听属性详情
    目录一.watch监听一般数据的变化(数值,字符串,布尔值)1.数值2.字符串3.布尔值二.watch 监听 复杂类型数据的变化1.对象2.数组3.对象数组4.对象数组的属性首先要确...
    99+
    2022-11-12
  • Vue中怎么使用计算属性
    这期内容当中小编将会给大家带来有关Vue中怎么使用计算属性,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。下面带大家了解一下Vue计算属性,介绍一下Vue计算属性的基础用法。计算属性有些时候,我们在模板中放...
    99+
    2023-06-21
  • Vue中的计算属性computed怎么用
    今天小编给大家分享一下Vue中的计算属性computed怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、计算属性co...
    99+
    2023-07-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作