Vue框架学习笔记——计算属性

news2024/11/28 16:37:06

文章目录

  • 前文提要
  • 代码需求描述
    • 插值语法实现
    • methods实现
  • 计算属性
      • getter执行时间:
      • setter
  • 计算属性简写形式(只读不改,才能如此简写)
  • slice截取元素,限制输入字符数量


前文提要

本人仅做个人学习记录,如有错误,请多包涵


代码需求描述

输入姓和名,能够将二者结合起来输出,姓和名之间使用’-'符号分隔

插值语法实现

<body>
  <div id="box">
    姓:<input type="text" placeholder="" v-model:value="firstName"><br/><br/>
    名:<input type="text" placeholder="" v-model:value="secondName"><br/><br/>
    姓名:{{firstName}}-{{secondName}}
  </div>
  <script type="text/javascript">
    Vue.config.productionTip = false
    const vm = new Vue({
      el: '#box',
      data: {
        firstName:'张',
        secondName:'三',
      }
    })
  </script>
</body>

其中v-model:value=可以简写为v-model=,也就是’:value’可以省略掉
实现效果如下:
在这里插入图片描述
在这里插入图片描述

methods实现

代码如下:

<body>
  <div id="box">
    姓:<input type="text" placeholder="" v-model:value="firstName"><br /><br />
    名:<input type="text" placeholder="" v-model:value="secondName"><br /><br />
    姓名:{{name()}}<br /><br />
    测试:<input type="text" placeholder="测试" v-model:value="nn"><br /><br />
  </div>
  <script type="text/javascript">
    Vue.config.productionTip = false
    const vm = new Vue({
      el: '#box',
      data: {
        firstName: '张',
        secondName: '三',
        nn:'yi'
      },
      methods: {
        name(){
          console.log(1)
          return this.firstName+'-'+this.secondName
        }
      }
    })
  </script>
</body>

methods中的函数会被添加到Vue实例中,因此可以直接在插值语法中调用。
data中的任何数据发生变化的时候,Vue的模版都会被重新解析,模版中含有methods中的name函数,methods不管函数返回值有没有变化,都会调用一次函数,因此会多次调用name函数。
所以每次查看和修改姓和名,都会调用一次该函数。
method中的函数,没有写成箭头函数,则可以从this指针这里访问Vue实例,Vue实例中因为数据代理添加了data中的数据,因此可以如此写。

呈现效果:
在这里插入图片描述

在这里插入图片描述

每在名中添加、删除一次字符,都会调用一次函数,在控制台输出一次1。

就算修改的不是和函数返回值有关的属性,也会调用函数
在这里插入图片描述

计算属性

将上文的代码修改为这样,使用计算属性computed也可以起到上文的效果,而且效率更高。

姓:

名:

姓名:{{name_}}

测试:

呈现效果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/56118b1d13fc465e952021a4814c8732.png) 代码解释: computed中的属性不能和methods中的函数名一致,会出错。 set函数中无法直接通过firstName访问到data中的firstName,必须通过this指针锁定Vue实例,再进一步锁定firstName

计算属性中的属性是不存在的,是使用其他的属性计算出来的,这也是为什么叫做计算属性的原因。
原理:底层借助了Object.defineproperty提供的getter和setter。

getter执行时间:

(1)初次读取时,会执行一次。
(2)当依赖的数据被改变时会再次调用。

注意点:不要使用vm.data_.get()调用函数,这是错误的

和methods方法不同,当返回的数据没有发生变化的时候,methods是会继续执行一遍了,而computed内部含有缓存机制(复用),当没有触发get函数执行的时候,有用到该计算属性的时候,会直接从缓存中提取,效率更高,调试更加方便。

示例图片:
在这里插入图片描述
当你修改的属性,和计算属性中包含的属性全无关系的时候,就算整个模版被重新解析,methods中的函数重新执行,computed中的计算属性也只会执行最开始的那次(因为相关data属性没有发生变化)

setter

在这里插入图片描述
当你对计算属性进行更改的时候,会调用setter,而和计算属性有关的属性发生变化的时候,会触发调用get函数,因此控制台会如此输出

计算属性简写形式(只读不改,才能如此简写)

当你规定的计算属性只读不写,则可以通过修改上文代码,写成这样应用:

computed:{
  name_:function(){
      console.log('调用了get')
      return this.firstName+'-'+this.secondName
  }
}

注意:要求只读不写,别修改计算属性。
不过这还不是最简形式,还可以进一步简化:

computed:{
  name_(){
      console.log('调用了get')
      return this.firstName+'-'+this.secondName
  }
}

注意name_不是函数,依旧是属性。

slice截取元素,限制输入字符数量

可以将getter中的代码改为下述样式:

return this.firstName.slice(0,3)+'-'+this.secondName

从而限制字符个数,最少为0,最多3个

示例图片:
在这里插入图片描述
超过3个字符的无法记录到计算属性中。


至此,结束。

如果你觉得这篇文章写的不错,多多点赞~收藏吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1254231.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue3(二)-基础入门

一、列表渲染 of 和 in 都是一样的效果 html代码&#xff1a; <div id"app"><ul><li v-for"item of datalist">{{ item }}</li></ul><ul><li v-for"item in dataobj">{{ item }}</li></u…

聚观早报 |红魔9 Pro支持165W快充;2023Q3欧洲手机市场报告

【聚观365】11月22日消息 红魔9 Pro支持165W快充 2023Q3欧洲手机市场报告 长安汽车官宣加入蔚来换电体系 网龙战略投资Rokid IBM推出5亿美元的风险基金 红魔9 Pro支持165W快充 截至目前&#xff0c;除了已经发布或即将亮相的几款骁龙8 Gen3常规旗舰外&#xff0c;游戏手机…

梯度详解与优化实战

什么是梯度 对所有自变量求偏微分构成的向量&#xff0c;它是一个向量&#xff08;有大小和函数值增长方向&#xff09; 导数是一个标量 找最小值点坐标的案例 import torchimport numpy as np import matplotlib.pyplot as plt def himmelblau(x):return (x[0]**2x[1]-11)…

MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、正弦函数曲线实例

MFC 绘制三种不同圆形以及绘制正弦函数曲线 本文使用visual Studio MFC 平台实现绘制单一颜色圆形、渐变颜色边框圆形、渐变填充圆形以及绘制三角函数正弦函数曲线. 关于基础工程的创建请参考 01-Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 02-vis…

SpringBoot 环境使用 Redis + AOP + 自定义注解实现接口幂等性

目录 一、前言二、主流实现方案介绍2.1、前端按钮做加载状态限制&#xff08;必备&#xff09;2.2、客户端使用唯一标识符2.3、服务端通过检测请求参数进行幂等校验&#xff08;本文使用&#xff09; 三、代码实现3.1、POM3.2、application.yml3.3、Redis配置类3.4、自定义注解…

部署项目时常用的 Linux 命令

目录 1 前言2 SSH登录命令3 SCP传输命令4 CP拷贝命令5 MV移动命令6 TAR解压命令7 DU查看文件夹/文件大小8 TAIL查看日志9 NOHUP后台运行10 结语 1 前言 在应用部署过程中&#xff0c;Linux命令是必不可少的工具。它们能够帮助我们管理文件、连接服务器、拷贝文件、查看日志以及…

大数据项目--学习笔记

新零售项目介绍 1&#xff0c;行业背景介绍 一&#xff0c;百货商店 百货商店是世界商业史上第一个实行新销售方法的现代大量销售组织。其新型销售方法有&#xff1a; 1&#xff0e;顾客可以毫无顾忌地、自由自在地进出商店&#xff1b; 2&#xff0e;商品销售实行“明码标价…

java基础语法总结

导言&#xff1a; Java语言是一种面向对象的编程语言&#xff0c;具有简单、可移植、安全、高性能等特点。本篇文章主要对java的基础的语法进行一个简单的总结和概述。 目录 导言&#xff1a; 正文&#xff1a; 1. 数据类型与变量 2. 运算符与逻辑控制 3. 方法 4. 数组…

数据结构 / 结构体字节计算

1. 结构体的存储 结构体各个成员的地址是连续的结构体变量的地址是第一个成员的地址 2. 64位操作系统8字节对齐 结构体的总字节大小是各个成员字节的总和&#xff0c;字节的总和需要是最宽成员的倍数结构体的首地址是最宽成员的倍数结构体各个成员的偏移量是该成员字节的倍数…

服务号和订阅号哪个好

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;在推送频率上来看&#xff0c;服务号每月能推送四条消息&#xff0c;而订阅号可以每天&#xff08;24小时&#xff09;推送一条消息。如果企业开通公众号的目的是提供服务&#xff0c;例如售前资讯…

JOSEF约瑟 BLD-20高压漏电保护继电器 50-1000ma AC220V

系列型号 BLD-20A高压漏电保护继电器 BLD-20高压漏电继电器 BLD-20高压漏电保护继电器 BLD-20X高压漏电保护装置 BLD-G20X高压漏电保护装置 用途 BLD-20高压漏电保护装置 (以下简称继电器)主用于交流电压1-10KV系统中,频率为50HZ,对供电系统的漏电(或接地)实现有选择性保…

MyBatis 操作数据库(入门)

一&#xff1a;MyBatis概念 (1)MyBatis &#x1f497;MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发 (2)持久层 1.持久层 &#x1f49c;持久层&#xff1a;持久化操作的层&#xff0c;通常指数据访问层(dao)&#xff0c;是用来操作数据库的 2.持久层的规范 ①…

【Web】Ctfshow Thinkphp3.2.3代码审计(1)

目录 ①web569 ②web570 ③web571 ④web572 ①web569 基础考察 /index.php/Admin/Login/ctfshowLogin ②web570 提示找路由 查看附件源码 (config.php) 发现定义了一个可执行命令的路由规则 /index.php/ctfshow/assert/eval($_POST[1]) 1system(tac /f*); ③web571 提…

The module to import is incompatible with the current project【鸿蒙开发-BUG已解决】

文章目录 项目场景:问题描述原因分析:解决方案:心得体会:知识点OpenHarmony:HarmonyOS:项目场景: 报错: The module to import is incompatible with the current project 问题描述 希望通过 import module 将该模块引入到我的项目。 导入后出现错误,因为项目和模块…

Scannet v2 数据集介绍以及子集下载展示

Scannet v2 数据集介绍以及子集下载展示 文章目录 Scannet v2 数据集介绍以及子集下载展示参考数据集简介子集scannet_frames_25kscannet_frames_test 下载脚本 download_scannetv2.py 参考 scannet数据集简介和下载-CSDN博客 scannet v2 数据集下载_scannetv2数据集_蓝羽飞鸟的…

pandas分组选中最大值并且新增列

题目 根据每个session_id分组&#xff0c;将popular最大的值设为这个session中所有popular的值 category item_id label popular session_id 0 4729 True 53.0 4069 0 4729 True 53.0 4069 0 4729 True 53.0 4069 0…

C++ PCL点云dscan密度分割三维

程序示例精选 C PCL点云dscan密度分割三维 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《C PCL点云dscan密度分割三维》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。…

hdlbits系列verilog解答(7420 chip)-49

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本次将实现7420逻辑芯片,它内部有2个4输入的与非门电路,外部有8个输入和2个输出管脚,功能框图如下所示: 二、verilog源码 module top_module ( input p1a, p1b, p1c, p1d,output p1y,input p2a, p2b, p2c…

Proteus仿真--基于数码管显示的频率计设计

本文介绍基于数码管的频率计设计&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真图如下 本设计中80C51单片机作为主控&#xff0c;用数码管作为显示模块&#xff0c;按下按键K1后可进行频率测量并显示 仿真运行视频 Proteus仿真--数码管显示的频率计 附完整Pro…

如何使用nginx部署静态资源

Nginx可以作为静态web服务器来部署静态资源&#xff0c;这个静态资源是指在服务端真实存在&#xff0c;并且能够直接展示的一些文件数据&#xff0c;比如常见的静态资源有html页面、css文件、js文件、图片、视频、音频等资源相对于Tomcat服务器来说&#xff0c;Nginx处理静态资…