Vue计算属性

article/2025/6/16 0:40:23

目录

1.姓名案例--插值语法实现

2.姓名案例 --methods实现

 3.姓名案例--计算属性实现

1.计算属性的定义

2.计算属性所写的位置和写法形式

3.计算属性通过什么来调用(读取)

 4.计算属性中的两个方法:get和set作用是什么?什么时候调用?

5.计算属性的精简写法(不要求修改计算属性的值,只是读取)

4.计算属性的总结


用一个案例的不同方式实现,来体现出Vue的计算属性的优势所在。

1.姓名案例--插值语法实现

 分析:分析,上面的代码也能实现功能,但是这样违背了Vue的一个原则:模板中的简单表达式。所以上面的代码不推荐这样写

2.姓名案例 --methods实现

    <div id="app">姓:<input type="text" v-model="firstName"><br><br> 名:<input type="text" v-model="lastName"><br><br> <!-- 这里写 fullName 表示把这个函数插入到这里 --><!-- fullName()表示把fullname这个函数的返回值插入到这里 -->全名: <span>{{fullName()}}</span></div></div><script>const vm = new Vue({el: '#app',data:{firstName: '张',lastName: '三'},methods:{fullName(){console.log('@-@fullName');// this指向的是 Vue实例对象console.log(this);//Vue {_uid: 0, _isVue: true, __v_skip: true, _scope: EffectScope, $options: {…}, …}return this.firstName + '-'+ this.lastName}}})</script>

上图代码解析过程分析:(重点) 

1.data中的数据,任何一个数据发生改变,Vue的模板都会重新解析一遍,就是Vue拿过来的模板整体要重新阅读解析

2.如果解析到插值语句里面在调方法,那么这个方法一定会帮你重新调用一遍

3.解析到fullName(),发现它是来自于一个函数(方法)的调用 ,也不知道这个函数的返回值跟之前是不是一样,所以就重新调一遍,重新调用就拿到了 最新的 firstName和最新的lastName 然后返回。

分析:虽然用methods方法也能实现功能,但是这样做的话,会让该方法多次调用

原因是:methods方法没有缓存,不能像计算属性一样从缓存中直接获取数据,需要重新调用一次方法获取数据。这就是计算属性相对于methods方法 的优势所在。

 3.姓名案例--计算属性实现

1.计算属性的定义

Vue认为data里面的都是属性

计算属性:用已有的属性去加工去计算去生成一个全新的属性

2.计算属性所写的位置和写法形式

属性是写在data里面。且vm._data中只有属性,不会有计算属性

计算属性是写在 配置项computed 里面

因为计算过程比较复杂,包括读和修改,有点像Object.defineProperty ,所以要写成一个对象的形式

注意点:计算属性 是一个对象,那么在 vm上面的就是一个对象?不不不 ,它是往vm上面放的时候,自动去调用get,把get的返回值拿到后,放到vm上面,然后那个返回值的名字叫 fullName(计算属性名)

3.计算属性通过什么来调用(读取)

注意点:计算属性中得 get 和 set 中得 this 都是指向 Vue实例化对象 vm

通过Vue实例化对象vm来读取

借助Vue开发者工具:

  

 4.计算属性中的两个方法:get和set作用是什么?什么时候调用?

get作用和get调用时机:

  • 1.浅层次:get:当有人读取fullName(计算属性)时,get就会被调用,且返回值就作为fullName(计算属性)的值
  • 2.深层次: get:1.计算属性fullName初次调用时  2.计算属性fullName所依赖的属性(firstName和lastName)发生变化时,就会再次调用。
  • 分析:计算属性初次调用时,get会执行,会将数据存储在 缓存 里面,再次去调用直接从缓存里面取,就不会再执行get。如果 计算属性所依赖的属性 改变,就会重新调用get,然后更新缓存。

解析模板时:

会有4处地方用到fullName,但是当计算属性fullName所依赖的的属性没有改时,get只调用一次:

当计算属性fullName所依赖的的属性firstName和lastName改变时,get就会调用:

set 的设置就是为了当  计算属性 fullName 改变时起作用。set 不是必须写,如果 计算属性会被改(不是计算属性所依赖的属性改,而是计算属性被改),就设置set。不修改就不写set

set 什么时候被调用?当计算属性 fullName被修改时才调用

        当计算属性fullName的值改成什么,set收到的的值就是什么,然后去把计算属性所依赖的属性改掉。

    <div id="app">姓:<input type="text" v-model="firstName"><br><br> 名:<input type="text" v-model="lastName"><br><br> 全名: <input type="text" v-model="fullName"></div></div><script>const vm = new Vue({el: '#app',data:{firstName: '张',lastName: '三'},computed:{fullName:{//get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值get(){//console.log(this);   //此处得 this 是 指向 vmconsole.log('fullName有人读取,get就被调用了');return this.firstName + "-"+ this.lastName;},//set当计算属性 fullName被修改时才调用,当计算属性fullName的值改成什么,set收到的的值就是什么set(value){console.log('set被调用了');//获取到修改的值后,去把对应的计算属性所依赖的属性值改了const arr = value.split('-');this.firstName = arr[0];this.lastName = arr[1];}}}})</script>

 分析:计算属性改变,通过set方法,计算属性所依赖的属性的值就会改,对应页面上用到计算属性所依赖的属性的值也会改。

其实:计算属性的值可以说是没有,因为计算属性在用的时候才从已有的属性中去算出计算属性的值。所以改掉计算属性的值,实际上是改计算属性所依赖的属性的值。 

注意点:计算属性中的set和get方法,不能写成箭头函数的形式,不然 其中的 this 指向就不是 Vue实例化对象vm了。

5.计算属性的精简写法(不要求修改计算属性的值,只是读取)

 注意点:这里计算属性简写后,表面上看着是一个函数的形式。但是使用的时候不能加()

eg: {{fullName()}} <==这种是错的   ;{{fullName}} <==这样才是对的

4.计算属性的总结

 计算属性:

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

        2.原理:底层借助了Object.defineProperty方法提供的getter和setter

        3.get函数什么时候调用?

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

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

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

        5.备注:

                01.计算属性最终会出现在vm上,直接读取使用即可 。{{fullName}}

                02.如果计算属性要修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生变化。


http://chatgpt.dhexx.cn/article/2FTNIyX7.shtml

相关文章

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

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

文章目录 前言最简模型规律分析分析总结结论解读 篇尾 前言 大梵天创造世界的时候做了三个金刚石柱子&#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;也能帮助…