Vue:计算属性

article/2025/6/16 2:06:22

一,计算属性

通过前面的学习,我们可以在模板中双向绑定一些数据或表达式了。但是表达式如果过长,或逻辑更为复杂时,就会变得雕肿甚至难以阅读和维护。例如:

<div id="example">{{ message.split('').reverse().join('') }}
</div>

这里是想要显示变量 message 的翻转字符串,为了达到目的。这个表达式包含了三个操作。显然,如果想要在模板中多包含此处的翻转字符串时,就会显得代码相当臃肿。

当一个属性的值依赖于其它属性的值时就可以使用的计算属性简化代码。举个例子:

<div id="example"><p>Original message: "{{ message }}"</p><p>Computed reversed message: "{{ reversedMessage }}"</p>
</div>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
<script>var vm = new Vue({el: '#example',data: {message: 'Hello'},computed: {// 计算属性的 getterreversedMessage: function () {// `this` 指向 vm 实例return this.message.split('').reverse().join('')}}})
</script>

结果如下:
在这里插入图片描述
所有的计算属性都以函数的形式写在 Vue 实例内的 comput 选项内,最终返回计算后的结果,即我们可以把一些计算的过程写到一个计算属性——comput 选项内中去,然后让它动态地计算,例如:
在这里插入图片描述

二,缓存特性

在上面的例子里,我们完全可以在表达式中调用方法来完成反序操作而不用计算属性,那么为什么还需要计算属性呢?原因就是计算属性是基于它的依赖缓存的:一个计算属性所依赖的数据发生变化时,它才会重新取值更新,否则只会返回之前的计算结果。

computed: {now: function () {return Date.now()}
}

上面的例子就不会实时更新,因为Date.now()不是响应式依赖。如果是在方法中使用Date.now(),则会在方法被调用时出现更新。

三,计算属性的使用

一个计算属性里可以完成各种复杂的逻辑,包括运算、函数调用等,只要最终返回一个结果就可以。

1, 使用vue实例内的多个数据

除了上例简单的用法,计算属性还可以依赖Vue实例的多个数据,只要其中任意一个数据变化,计算属性就会重新执行,视图也会更新。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>学习Vue</title><style type="text/css">#example {color: red;font-size: 20px;}</style></head><body><div id="example"><p>商品总价: {{ totalPrice }}</p></div><script src="vue.js" type="text/javascript" charset="UTF-8"></script><script>var vm = new Vue({el: '#example',data: {package1: [{name: 'iphone12 pro max 128GB',price: 9299,count: 2,},{name: 'xiaomi10 至尊纪念版 8+256',price: 5599,count: 3,}],package2: [{name: 'apple',price: 3,count: 3,},{name: 'millet',price: 12,count: 1,}]},computed: {totalPrice: function () {var price = 0;for (var i=0; i<this.package1.length; i++){price += this.package1[i].price * this.package1[i].count;}for (var i=0; i<this.package2.length; i++){price += this.package2[i].price * this.package2[i].count;}return price;}}})</script></body>
</html>

2,计算属性的getter与setter

每一个计算属性都有getter与setter。
前者用于读取,是默认使用的;
后者用于写入设置,会在修改数据后被触发,通常不使用。

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>学习Vue</title><style type="text/css">#example {color: red;font-size: 20px;}</style></head><body><div id="example"><p>姓名: {{ fullName }}</p></div><script src="vue.js" type="text/javascript" charset="UTF-8"></script><script>var vm = new Vue({el: '#example',data: {first_name: 'Jack',last_name: 'Johnson'},computed: {fullName: {get: function (){return this.first_name + ' ' + this.last_name;},set: function (value){var new_nme = value.split(' ');this.first_name = new_nme[0];this.last_name = new_nme[name.length-1];}}}});vm.fullName = "Vincent van Gogh";</script></body>
</html>

3,跨vue实例使用数据

计算属性除了依赖本vue实例的数据外,还可以依赖其它势力的数据。

<div id="app1"><p>app1's number: "{{ a }}"</p>
</div>
<div id="app2"><p>app2's number: "{{ b }}"</p><p>the computed sum: "{{ sum }}"</p>
</div>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
<script>var app1 = new Vue({el: '#app1',data: {a: 1}})var app2 = new Vue({el: '#app2',data: {b: 2},computed: {sum: function () {return app1.a + this.b;}}})
</script>

结果如下:
在这里插入图片描述

4,计算属性依赖其它计算属性

除了数据依赖,计算属性也可依赖其它计算属性。

<div id="app"><p>a: "{{ a }}"</p><p>a double: "{{ aDouble }}"</p><p>a plus: "{{ aPlus }}"</p>
</div>
<script src="vue.js" type="text/javascript" charset="UTF-8"></script>
<script>var vm = new Vue({el: '#app',data: {a: 1},computed: {aDouble: function (){return this.a * 2;},	aPlus: {get: function () {return this.a += 4;},set: function (value) {this.a = value - 1;}}}})console.log(vm.a)console.log(vm.aPlus) console.log(vm.aPlus = 3)console.log(vm.a)console.log(vm.aDouble)
</script>

结果如下:
在这里插入图片描述


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

相关文章

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;要怎…

【递归】小学生都看得懂的汉罗塔问题

文章目录 前言最简模型规律分析分析总结结论解读 篇尾 前言 大梵天创造世界的时候做了三个金刚石柱子&#xff0c;在一根柱子上从上到下按照大小顺序摞着64骗黄金盘子&#xff0c;大梵天命令婆罗门把圆盘开始按大小顺序重新摆放在另外一个柱子上。在小圆盘上不能放大圆盘&…

汉罗塔问题(递归)

数据结构–汉罗塔 题目描述 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。一开始&#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制: 1.一…

多柱汉罗塔(python解法,带注释,注释为个人理解)

一、参考链接&#xff1a; 1、普通汉罗塔链接&#xff08;这边也是我的博文&#xff09;&#xff1a; (166条消息) 递归经典算法案例题&#xff08;汉罗塔、阶乘、斐波那契代码&#xff09;_南风~古草的博客-CSDN博客_汉罗塔 2、大佬的多柱汉罗塔博文&#xff08;有数学推…

累加—递归汉罗塔问题 (C语言)

一、累加—递归 一、代码 二、测试结果 二、汉罗塔问题 一、分析 二、代码 三、测试结果 三、总结 一、累加—递归 一、代码 //累加的递归实现 #include <stdio.h>int addTo(int n) {if(n < 0)return 0;else{return addTo(n-1)n;} } void addToTest() {int n…

【C语言】汉罗塔

前言 &#x1f388;大家好&#xff0c;我是何小侠&#x1f388; &#x1f300;大家可以叫我**小何或者小侠&#x1f300;** &#x1f534;我是一名普通的博客写作者&#x1f534; &#x1f490;希望能通过写博客加深自己对于学习内容的理解&#x1f490; &#x1f338;也能帮助…

[C语言]C语言解决汉罗塔问题(初学者版)

目录 1、汉罗塔问题解决思路&#xff1a; 2、代码实现&#xff1a; 函数部分&#xff1a; 全部代码&#xff1a; 运行结果&#xff1a; 3、结语&#xff1a; 1、汉罗塔问题解决思路&#xff1a; 以三个为例&#xff0c;步骤为&#xff1a; 1.首先我们需要将其分成两个整体…

汉诺塔问题的详细讲解(python版)

2022.3.17 2022.11.15 增加次数计算一&#xff0e;抽象为数学问题&#xff1a; 从左到右有A、B、C三根柱子&#xff0c;其中A柱子上面有从小叠到大的n个圆盘&#xff0c;现要求将A柱子上的圆盘移到C柱子上去&#xff0c;期间只有一个原则&#xff1a;一次只能移到一个盘子且大…

Golang 汉罗塔问题

先用一般方法实现汉罗塔方法: 先确定三个"石柱" A B C 。n代表A柱起始圆盘数量 主函数: 结合栈来实现汉罗塔。 因为栈先进后出的特点 很适合汉罗塔。其实和上述方法本质一样,只不过添加了 栈的特性 这里定的栈最大容量为7,可以根据实际情况更改 栈的构造&#xff…

汉罗塔(递归分治)

Java代码如下 public class Hanoi {//操作步骤数private static int steps 1;public static void main(String[] args) {//盘子数目int diskNumber 4;doTowers(diskNumber, A, B, C);}private static void doTowers(int diskNum, char from , char via, char to){if (diskNum…

汉诺塔(Hanoi)问题,Java实现,C语言实现,Python实现!!!

目录 一、汉诺塔的玩法 二、汉诺塔的逻辑 三、代码实现 四、运行结果 五、总结 一、汉诺塔的玩法 汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#x…

Java基础语法(汉罗塔)

Java基础语法&#xff08;汉罗塔&#xff09; 1 起源2 需求3 分析3.1 1个碟子3.2 2个碟子3.3 3个碟子3.4 4个碟子3.5 规律 4 代码实现&#xff1a;直接算法5 代码实现封装&#xff1a;栈的思想 1 起源 汉罗塔&#xff08;又称河内塔&#xff09;问题是源于印度一个古老传说的益…

《经典递归问题:汉罗塔》

&#x1f320;作者&#xff1a;TheMythWS. &#x1f386;专栏&#xff1a;《JavaSE》 &#x1f387;座右铭&#xff1a;不走心的努力都是在敷衍自己&#xff0c;让自己所做的选择&#xff0c;熠熠发光。 目录 ✨汉罗塔的介绍 图解游戏​ ✨N层汉罗塔需移动的次数 ✨汉罗塔的…

数据链路层 功能概述

数据链路层的研究思想 数据链路层基本概念 数据链路层功能概述 数据链路层功能概述

数据链路层功能概述、封装成帧与透明传输

你一定要做自己&#xff0c;做自己喜欢的事&#xff0c;然后把自己交给命运 文章目录 本章启航思维导图数据链路层数据链路层基本概念数据链路层功能概述封装成帧透明传输组帧的四种方法字符计数法字符填充法零比特填充法违规编码法 本章启航思维导图 数据链路层 数据链路层基…