谷粒商城实战笔记-40-前端基础-Vue-计算属性、监听器、过滤器

文章目录

  • 一,计算属性
    • 1,用途
    • 2,用法
      • 2.1 定义View
      • 2.2 声明计算属性
    • 3,注意事项
  • 二,监听器
    • 1. 使用 `watch` 监听属性的变化
  • 三,过滤器
    • 1,定义局部过滤器
    • 2,定义全局过滤器
    • 3,使用过滤器
    • 4,过滤器参数
    • 5,链式过滤器

本节的主要内容是学习Vue的三个特性的使用:

  • 计算属性
  • 监听器
  • 过滤器

一,计算属性

计算属性(Computed Properties)是其中非常强大的一个特性:

  • 基于依赖的数据进行运算并缓存结果
  • 依赖的数据发生变化时会触发重新计算。

相当于模板中的复杂表达式,计算属性要更高效、更可读。

1,用途

数据处理:可以对原始数据进行转换或组合,比如将多个数据源合并成一个。
性能优化:只有当它的相关依赖发生改变时,计算属性才会重新求值。这避免了不必要的计算。
代码清晰:将逻辑放在计算属性中可以使模板保持干净,提高代码的可读性和可维护性。

2,用法

2.1 定义View

下面是一个简单的例子来说明如何使用计算属性。

这是一个简单图书购物车界面。用户可以看到两本书的信息——《西游记》和《水浒传》,每本书都有其单价和数量输入框。总价会根据用户选择的书的数量和单价实时更新。

    <div id="app"><!-- 某些结果是基于之前数据实时计算出来的,我们可以利用计算属性。来完成 --><ul><li>西游记; 价格:{{xyjPrice}},数量:<input type="number" v-model="xyjNum"> </li><li>水浒传; 价格:{{shzPrice}},数量:<input type="number" v-model="shzNum"> </li><li>总价:{{totalPrice}}</li>{{msg}}</ul></div>

2.2 声明计算属性

总价totalPrice的计算非常适合使用计算属性来实现。

     new Vue({el: "#app",data: {xyjPrice: 99.98,shzPrice: 98.00,xyjNum: 1,shzNum: 1,msg: ""},computed: {totalPrice(){return this.xyjPrice*this.xyjNum + this.shzPrice*this.shzNum}}})

如上JS代码,总价totalPrice定义在Vue对象的computed属性下。

效果如下。

在这里插入图片描述

3,注意事项

  • 计算属性内部可以通过 this 访问 Vue 实例以及其它数据属性。
  • 如果计算属性的函数过于复杂,考虑使用方法(methods)代替,因为计算属性的缓存机制可能使得调试变得困难。
  • 计算属性也可以声明为只读的,通过添加 getter/setter 的形式来实现。

二,监听器

监听器(Watcher)是框架内部用于响应数据变化的核心机制之一。不过,在 Vue 开发中,我们通常不会直接操作 Watcher 类,而是使用更高级的 API 如 watch 或者在组件选项中定义的 watch 属性来实现侦听器的功能。

下面基于前面的图书购物车为例说明监听器的用法,假设西游记图书的库存只有3本,则当用户输入的数字大于3时,就要提示库存不足。此时就需要监听用户的输入。

1. 使用 watch 监听属性的变化

在 Vue 组件中,使用 watch 属性来监听某个数据属性的变化,并执行相应的函数。

        new Vue({el: "#app",data: {xyjPrice: 99.98,shzPrice: 98.00,xyjNum: 1,shzNum: 1,msg: ""},computed: {totalPrice(){return this.xyjPrice*this.xyjNum + this.shzPrice*this.shzNum}},//watch监控一个值的变化。从而做出相应的反应。watch: {xyjNum(newVal,oldVal){if(newVal>3){alert("库存超出限制");this.xyjNum = 3}}},})

在这个例子中,每当 xyjNum 的值发生变化时,watch 中定义的函数就会被调用,超过库存则弹窗提示。

注意watch中的函数对象名称,必须和要监听的属性名一致,如watch中的xyjNum和input的属性xyjNum保持一致。

在这里插入图片描述

三,过滤器

过滤器主要用于格式化数据显示,它们接收一个值作为输入并返回一个经过转换的值。过滤器可以定义为全局的或者局部的,并且可以在模板中使用。

基于如下需求学习过滤器的使用,遍历展示model中的用户列表信息,展示时将代表性别的枚举值转换为字符展示,这个转换的过程就可以使用过滤器

最终效果如下。
在这里插入图片描述

模板View。

	<!-- 过滤器常用来处理文本格式化的操作。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 --><div id="app"><ul><li v-for="user in userList">{{user.id}} ==> {{user.name}} ==> {{user.gender | genderFilter}} ==> {{user.gender | gFilter}}</li></ul></div>

model中的用户列表数据。

		   data: {userList: [{ id: 1, name: 'jacky', gender: 1 },{ id: 2, name: 'peter', gender: 0 }]}

1,定义局部过滤器

局部过滤器只在当前 Vue 实例中可用,定义在Vue对象的 filters 属性中。

	  let vm = new Vue({el: "#app",data: {userList: [{ id: 1, name: 'jacky', gender: 1 },{ id: 2, name: 'peter', gender: 0 }]},filters: {// filters 定义局部过滤器,只可以在当前vue实例中使用genderFilter(val) {if (val == 1) {return "男";} else {return "女";}}}})

2,定义全局过滤器

全局过滤器可以在任何 Vue 组件中使用。定义全局过滤器的方式是在 Vue 实例创建之前使用 Vue.filter() 方法。

Vue.filter("gFilter", function (val) {if (val == 1) {return "男~~~";} else {return "女~~~";}
})

3,使用过滤器

在模板中,过滤器通过管道符 | 应用于表达式。

	<div id="app"><ul><li v-for="user in userList">{{user.id}} ==> {{user.name}} ==> {{user.gender | genderFilter}} ==> {{user.gender | gFilter}}</li></ul></div>

4,过滤器参数

过滤器可以接受额外的参数。
,

Vue.filter('padNumber', function (value, totalLength) {var str = '' + value;while (str.length < totalLength) {str = '0' + str;}return str;
});

使用参数

<!-- 使用过滤器参数 -->
<p>{{ 42 | padNumber(4) }}</p>
<!-- 结果将是 "0042" -->

5,链式过滤器

多个过滤器可以串联使用。

示例代码

<p>{{ "hello world" | toUppercase | reverseString }}</p>

这里假设 toUppercase 是另一个定义好的过滤器,上面的代码会先将字符串转为大写,然后再反转字符串。

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

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

相关文章

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(六)-无人机直接C2通信

目录 引言 5.4 直接C2通信 5.4.1 概述 5.4.2 A2X直接C2通信服务的授权策略 5.4.3 USS使用A2X直接C2通信服务的C2授权程序 5.4.4 直接C2通信建立程序 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别…

bs4模块使用(一)

1. 安装BS4 pip install beautifulsoup4 pip install lxml2. 对象种类 bs4将html文档解析成一个树形结构&#xff0c;每个节点都是python对象&#xff0c;大概可分为下面四种&#xff1a; 2.1 Tag 后面再详细介绍&#xff0c;先介绍最重要的两个属性 name soup Beautiful…

数据结构——队列(链式结构)

一、队列链式结构定义 队列的链式存储结构是一种用链表实现的队列,它不像顺序存储结构那样需要预先分配固定大小的空间。链式存储结构的队列由节点组成,每个节点包括数据和指向下一个节点的指针。队列的链式存储结构可以动态地分配内存,更灵活地处理数据。在链式存储结构中…

【java SE语法篇】1.运算符

目录 1. 运算符和表达式2. 算数运算符3. 隐式转换4. 强制转换5. 自增自减运算符6. 赋值运算符7. 扩展运算符8. 关系运算符9. 逻辑运算符9.1 & 和 | 的使用&#xff1a;9.2 ^&#xff08;异或&#xff09;的使用&#xff1a;9.3 !&#xff08;取反&#xff09;的使用&#x…

监控易直播回放2407期:IT监控平台可视化运维

主播&#xff1a;监控易技术经理 刘美玲 大家好&#xff0c;现在是7月18号下午2点&#xff0c;欢迎大家来到本次的直播分享。今天&#xff0c;我们将深入探讨IT监控平台的可视化实现。在这个信息化时代&#xff0c;IT设备的稳定性对于业务的连续性起着至关重要的作用。而IT监控…

Unity入门——引擎窗口

主要内容 1.窗口布局 2.Hierarchy层级窗口 3.Scene场景窗口 窗口布局 右上角layout选项 层级和场景窗口 Scene和Hierarchy 场景窗口和层级窗口是息息相关的&#xff0c;层级窗口中看到的内容就是场景窗口中的显示对象。 Hierar层级窗口 我们可以在Hierarchy窗口中创建…

项目部署上线(跨域问题的处理)

前言: 项目想要上线&#xff0c;前提是肯定需要一台服务器 我下面使用的是腾讯服务器和宝塔Linux的管理工具来进行项目的部署上线 服务器配置&#xff08;初始化&#xff09;-CSDN博客 项目部署&#xff1a; 我原来那篇文章写了用nginx的原生部署&#xff0c;不过我觉得那…

数据闭环的核心-Auto-labeling方案分享

1. 简介 BEV算法的开发已经到了深水区&#xff0c;各家都投入了大量的精力去做bev的落地开发&#xff0c;其中一块最关键的就是如何高效的完成BEV的数据标注&#xff0c;无论是BEV 3D 目标&#xff0c;BEV 去高精地图或者是BEV Occupancy。 相比于车端的感知算法&#xff0c;…

exo 大模型算力共享;Llama3-70B是什么

目录 exo 大模型算力共享 exo框架的特点 如何使用exo框架 注意事项 结论 Llama3-70B是什么 一、基本信息 二、技术特点 三、性能与应用 四、未来发展 exo 大模型算力共享 exo框架的特点 异构支持:支持多种不同类型的设备,包括智能手机、平板电脑、笔记本电脑以及高…

java之log4j反序列化

1 审计思路 以Log4j漏洞审计为案例,谈一谈审计如何快速的锁定通用型漏洞 1.1 确定源码是否引用了漏洞所属的开源组件 该项目是一个maven项目,直接在Pom文件中搜索log4j的jar包及版本引用问题,如果该版本受影 响,进入下一步 1.2 寻找漏洞的入口 1.3 逐个排查入口是否有效…

[MySQL][深入理解隔离性][上][MVCC]详细讲解

目录 0.铺垫1.初识MVCC2.三个记录隐藏列字段1.是什么&#xff1f;2.示例 3.undo日志4.模拟MVCC5.思考 0.铺垫 在RR级别的时候&#xff0c;多个事务的update&#xff0c;多个事务的insert&#xff0c;多个事务的delete&#xff0c;是否会有加锁现象&#xff1f; 现象结果是&…

[计算机基础]一、计算机组成原理

计算机组成原理的考察目标为&#xff1a; 1. 掌握单处理器计算机系统中主要部件的工作原理、组成结构以及相互连接方式。 2. 掌握指令集体系结构的基本知识和基本实现方法&#xff0c;对计算机硬件相关问题进行分析&#xff0c;并能够对相关部件进行设计。 3. 理解计算机系统的…

MVCC数据库并发控制技术

一、引言 MVCC&#xff08;Multi-Version Concurrency Control&#xff09;是一种广泛使用的数据库并发控制技术&#xff0c;它允许数据库读操作和写操作并发执行&#xff0c;而无需加锁整个表或行&#xff0c;从而大大提高了数据库的并发性能和吞吐量。MVCC主要被应用于支持事…

SAP Fiori 实战课程(二):新建页面

课程回顾 上一课中,利用Visual studio Code 新建、并运行了一个Demo工程。可以实现对项目的启动,启动后进入一个List清单。 那么本次课程的目前就是在上一节Demo的基础上,从零开始新建一个完整的页面。实现从首页清单,选择行后,鼠标点击,进入下一个页面。 准备工作 在开…

【BUG】已解决:ModuleNotFoundError: No module named ‘tensorflow‘

已解决&#xff1a;ModuleNotFoundError: No module named ‘tensorflow‘ 目录 已解决&#xff1a;ModuleNotFoundError: No module named ‘tensorflow‘ 【常见模块错误】 【解决办法】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff…

Java | Leetcode Java题解之第274题H指数

题目&#xff1a; 题解&#xff1a; class Solution {public int hIndex(int[] citations) {int left0,rightcitations.length;int mid0,cnt0;while(left<right){// 1 防止死循环mid(leftright1)>>1;cnt0;for(int i0;i<citations.length;i){if(citations[i]>mi…

新版GPT-4omini上线!快!真TM快!

大半夜&#xff0c;OpenAI突然推出了GPT-4o mini版本。 当我看到这条消息时&#xff0c;正准备去睡觉。mini版本质上是GPT-4o模型的精简版本&#xff0c;没有什么革命性的创新&#xff0c;因此我并没有太在意。 结果今天早上一觉醒来发现伴随GPT-4o mini上线&#xff0c;官网和…

Linux 12:多线程2

1. 生产者消费者模型 生产者消费者模型有三种关系&#xff0c;两个角色&#xff0c;一个交易场所。 三种关系&#xff1a; 生产者之间是什么关系?竞争 - 互斥 消费者和消费者之间?竞争 - 互斥 消费者和消费者之间?互斥和同步 两个角色&#xff1a; 生产者和消费者 一个交…

【07】LLaMA-Factory微调大模型——微调模型导出与微调参数分析

上文介绍了如何对微调后的模型进行使用与简单评估。本文将介绍对微调后的模型进行导出的过程。 一、llama-3微调后的模型导出 首先进入虚拟环境&#xff0c;打开LLaMA-Factory的webui页面 conda activate GLM cd LLaMA-Factory llamafactory-cli webui 之后&#xff0c;选择…

C#开发:PowerDesigner建表和Navicat导入数据

一、打开Powerdesigner&#xff0c;新建一个模型&#xff0c;点击ok 二、用工具面板拖拽出一个数据表 &#xff08;如果没有工具面板&#xff0c;请在如下操作中开启&#xff09; 三、双击刚刚的拖拽出来的表&#xff0c;设计表的字段&#xff0c;可以添加注释说明 【备注】…