vue 计算属性

article/2025/6/16 1:54:58

计算属性:

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

        2、原理:底层借助了object.defineproperty方法提供的getter和setter。

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

                (1)初次读取时会执行一次。

                (2)当依赖的数据发生改变时会被再次调用。

        4、优势:与methods实现相比,内部存在缓存机制(复用),效率更高,调试方便。

        5、备注:

                (1):计算属性最终会出现在vm上,直接读取使用。

                (2):如果计算属性要被修改,那必须写set函数去响应修改。 

<body><div class="a" id="a">省:<input type="text" v-model="province"> <br><br>市:<input type="text" v-model="city"> <br><br>位置:<span>{{ area }}</span> <br><br>修改位置:<input type="text" v-model="area"></div><script>var vm = new Vue({el: '#a',data: {province : '云南',city : '昆明',},computed:{area:{get(){console.log('get方法被调用')return this.province + '-' + this.city},set(area){console.log('set方法被调用')const arr = area.split('-')this.province = arr[0]this.city = arr[1]}}}})</script>
</body>

 省和市通过绑定v-model事件实现数据的双向绑定,而所在位置的信息并不在data数据中,这就是所需的数据不存在,所以用到了计算属性来计算得到,当然也可以通过将数据通过插值法直接在{{ }}中写表达式实现例如{{province + '-' + city}},但是在vue中希望模板视图中尽量的简单,所以不推荐,但是这样的写法并不会报错。其次通过methods下写方法页可以实现,定义好方法后直接在视图中{{方法名()}}也可以。但是由于计算属性的缓存机制,所以优先使用计算属性方法。

如下图修改省和市可以通过计算属性得到位置。修改省和市的时候同时位置信息也发生改变 

 

由于计算属性有缓存机制,所以在已有属性不发生改变的情况下,同时使用多次计算属性也只会调用一次get方法。

除非我们通过input框去修改了省和市的数据,使数据发生改变时才会再次调用get方法去更新计算属性。

通常计算属性并不会去修改,我们只是为了展示一些计算后的属性去供人查看。所以计算属性有一个简洁的写法,只具备get方法,具体代码如下:

 

计算属性与监视属性的区别:

  • computed: 是vue的计算属性, 是通过data中已有的属性计算得来的, 理解为是对data数据的加工处理, 计算属性最终会出现在VM上可以直接读取
  • watch: 是vue的监听属性, 和computed一样都是一个对象, 当被监视的属性变化时, 回调函数自动调用, 进行相关操作(监视的属性必须存在,才能进行监视), 监听复杂类型数据(对象,数组)变化时需要加上deep属性开启深度监听
  • 两者区别:
    • computed能完成的功能,watch都可以完成
    • watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作, computed不支持异步,有异步操作时无法监听数据变化
    • computed支持缓存,当其依赖的属性的值发生变化时,计算属性会重新计算,反之,则使用缓存中的属性值;watch不支持缓存,当对应属性发生变化的时候,响应执行。
    • computed第一次加载时就监听;watch默认第一次加载时不监听(可以通过设置immediate参数为true实现第一次加载时监听)。


http://chatgpt.dhexx.cn/article/Yqn9JTWP.shtml

相关文章

【vue】计算属性

vue官网对于计算属性的描述&#xff1a; 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。 当你想要在模板中的多处包含此翻转字符串时&#xff0c;就会更加难以处理。所以&#xff0c;对于任何复杂逻辑…

Vue计算属性实现成绩单,Vue计算属性

Vue计算属性实现成绩单 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>成绩单统计</title><script src"js/vue.js" type"text/javascript" charset"utf-8"…

Vue-计算属性

一、计算属性的使用 【什么是计算属性】 ——写在computed对象中的属性&#xff0c;本质上是一个方法&#xff0c;不过使用时依旧当属性来使用&#xff01; 1.计算属性&#xff1a;首先它是一个属性&#xff0c;所以使用方式跟其他的属性没什么&#xff0c;就是定义的时候不同…

Vue的计算属性

一、姓名案例 1、姓名案例 效果&#xff1a;两个输入框&#xff1a;姓名 两个输入框改变 全名也会跟着改变 实现联动效果2、插值语法实现姓名案例 1、简单实现 2、增加需求 只收集姓 的输入框里面前三位&#xff0c;后面不再录入 3、再次优化 需要将姓输入框的前3位取出…

Vue计算属性

目录 1.姓名案例--插值语法实现 2.姓名案例 --methods实现 3.姓名案例--计算属性实现 1.计算属性的定义 2.计算属性所写的位置和写法形式 3.计算属性通过什么来调用(读取&#xff09; 4.计算属性中的两个方法&#xff1a;get和set作用是什么&#xff1f;什么时候调用&…

Vue|计算属性

1. 计算属性1.1 差值语法1.2 methods1.3 计算属性 1. 计算属性 1.1 差值语法 开始前分别在项目目录创建文件夹及页面如下 需求1&#xff1a;在两个文本框中分别输入姓和名的同时需要在下方将数据进行拼接组装&#xff0c;效果如下图 如果用传统的方式来实现的话&#xff0c;需…

Vue计算属性可以传参吗

vue计算属性可以传参&#xff0c;但是不能直接传参 下面举个小例子 比如 我们可以使用函数轻松实现 <div id"test"><div v-for(item,index) in songer>{{songerName(index,item)}}</div> var app new Vue({el: #test ,data: {songer: [周杰伦 …

四、vue计算属性的使用

通常&#xff0c;在模板中可直接通过插值语法显示data中的属性&#xff0c;但是在某些情况&#xff0c;需要将某些数据进行转化后显示或者将多个数据结合起来显示。 计算属性的基本使用 <body><div id"app"><!-- 将张、三 拼接成一个完整的名字&…

vue---十分钟搞懂vue计算属性

计算属性 前言 这篇文章介绍vue组件基础中的计算属性&#xff0c;文章持续输出中&#xff01; 废话不多说&#xff0c;直接上刺刀&#xff01;&#xff01; 1. 什么是计算属性 计算属性本质上就是一个 function 函数&#xff0c;它可以实时监听 data 中数据的变化&#xff0…

四、Vue计算属性

01-计算属性的基本使用 1.1 计算属性 1、在模板中可以直接通过插值语语法显示一些data中的数据 2、但是在某些情况下&#xff0c;我们可能需要对数据进行一些转化后在显示&#xff0c;或者需要将多个数据结合起来进行显示 比如我们有firstName和lastName两个变量&#xff0c…

vue计算属性传参

最近很多小伙伴问到&#xff0c;计算属性怎么做到像普通函数一样传参呢&#xff1f; 针对这个问题&#xff0c;我们来看下下面的示例&#xff1a; <template><p>{{ getCallerName }}</p></template><script> export default {props: {callRecor…

08、VUE计算属性

1、计算属性简介 在原生的JavaScript中我们需要一个来自不同数的和的变量&#xff0c; 我们会使用let numab:这种写法&#xff0c;但是当a和b发生改变的 时候&#xff0c;num并不会自动修改&#xff0c;在vue中我们提供了计算属性 可以很好的解决这个问题。2、计算属性的语法 …

Vue-Vue的计算属性(computed)

1.理解 计算属性: 1.定义:要用的属性不存在&#xff0c;要通过已有属性计算得来 2.原理:底层接住了Object.defineproperty方法提供的getter和setter 3.get函数什么时候执行&#xff1f; 初次读取会执行一次 当以来的数据发生变化时会被再次调用 . 4.优势:与methods相比&…

Vue:计算属性

一&#xff0c;计算属性 通过前面的学习&#xff0c;我们可以在模板中双向绑定一些数据或表达式了。但是表达式如果过长&#xff0c;或逻辑更为复杂时&#xff0c;就会变得雕肿甚至难以阅读和维护。例如&#xff1a; <div id"example">{{ message.split().re…

Vue - 计算属性

1.vue计算属性-computed 一个数据, 依赖另外一些数据计算而来的结果 场景: 一个变量的值, 需要用另外变量计算而得来 语法: computed: {"计算属性名" () {return "值"} }注意1: 计算属性和data属性都是变量-不能重名. 用法和data相同 注意2: 函数内变量变…

汉罗塔(河内塔)问题的数学模型

问题引入&#xff1a; 给定A、B、C三个木桩子&#xff0c;给定由n个圆盘组成的塔&#xff08;n个圆盘满足从上到小大小递减的顺序套在A桩上&#xff09;&#xff0c;我们要做的是要将A桩子上的所有圆盘移动到B桩子上&#xff0c;要求每次只能移动一个圆盘&#xff0c;并且移动…

汉罗塔小游戏(自创)

汉诺塔是这样一种小游戏&#xff1a; 有三根柱子。一开始&#xff0c;若干张圆盘按照上小下大的顺序串在第一根柱子上。而游戏的目标为将所有圆盘全部移动到第三根柱子上去&#xff0c;并且仍要保持上小下大的顺序。而且要求&#xff1a; ①每次只能移动一张圆盘。 ②较大的圆盘…

C语言实现递归解决汉罗塔问题

1.问题&#xff1a; 汉诺塔(Tower of Hanoi&#xff09;&#xff0c;又称河内塔。是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新…

汉罗塔Python递归实现

count0 def fn(n,begin,end,middle):global count #global更新并以字典形式返回当前全部局部变量(如果不是全局变量在每次调用时初值会被清零)if n1:print("{}:{}-->{}".format(1,begin,end))count1else :fn(n-1,begin,middle,end)print("{}:{}-->{}&qu…

汉罗塔与青蛙跳台阶的递归实现(及扩展青蛙跳台阶)C语言从入门到入土(入门篇)(算法篇p2)

目录 题目&#xff1a;汉罗塔递归实现 思路 实现 题目&#xff1a;青蛙跳台阶递归实现 思路 实现 青蛙跳台阶问题的延伸 谁都不能阻挡你成为更优秀的人。 题目&#xff1a;汉罗塔递归实现 汉罗塔&#xff0c;用递归实现&#xff0c;有三个柱子n个盘子在a&#xff0c;要怎…