Vue2,Vue3 computed计算属性用法

news2024/11/24 11:06:25

计算属性就是当依赖的属性的值发生变化的时候,才会触发他的更改,如果依赖的值,不发生变化的时候,使用的是缓存中的属性值。

computed购物车案例

1.Vue2版

<template>
  <div>
   
  <div>
    <input v-model="keyword"/>  
    <table>
      <thead>
        <tr>
          <th>商品名称</th>
          <th>价格</th>
          <th>数量</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(product, index) in sousuo" :key="index">
          <td>{{ product.name }}</td>
          <td>{{ product.price }}</td>
          <td><button @click="product.quantity--">-</button>{{ product.quantity }}<button @click="product.quantity++">+</button></td>
          <td>
            <button @click="deleteProduct(index)">删除</button>
          </td>
        </tr>
      </tbody>
      
    </table>
    总价:{{getsum }}
  </div>
</div>
</template>

<script>
import { computed } from 'vue';
export default {
  data() {
    return {
      products: [
        { name: '商品1', price: 10, quantity: 5 },
        { name: '商品2', price: 20, quantity: 3 },
        { name: '商品3', price: 15, quantity: 2 }
      ],
      sum:0,
      keyword:''
    };
  },
  methods: {
    deleteProduct(index) {
      this.products.splice(index, 1);
    }
  },
  computed:{
    getsum() {
      const sum= this.sousuo.reduce((prev, next) => {
        return prev + next.price * next.quantity;
      }, 0);
      return sum
    },

    sousuo(){
      return this.products.filter(product=>product.name.includes(this.keyword))
    },

  },

  
  
};

</script>

<style>

</style>

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

2.Vue3+ts版
功能和Vue2版一样

<template>
  <div>
    <div>
        <p class="sou">搜索框在此:<input v-model="keyword" border:1px/> </p> 
       
    <table>
      <thead>
        <tr>
          <th>商品名称</th>
          <th>价格</th>
          <th>数量</th>
          <th></th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(product, index) in search" :key="index">
          <td>{{ product.name }}</td>
          <td>{{ product.price }}</td>
          <td><button @click="product.quantity--">-</button>{{ product.quantity }}<button @click="product.quantity++">+</button></td>
          <td>
            <button @click="del(index)">删除</button>
          </td>
        </tr>
      </tbody>
      
    </table>
    <p>您需要支付{{ _total }}</p>
    <button @click="allbuy">我全都要</button>
    <p v-show="showbuy">要全买?所有商品总价:{{total }}</p>
  </div>
  </div>
</template>

<script setup lang="ts">
import{ref,reactive,computed} from 'vue'
    let keyword = ref<string> ('')

    interface Data{
        name:string,
        price:number,
        quantity:number
    }

    let showbuy = ref<boolean>(false)

    const data = reactive<Data[]> ([
        { name: '商品1', price: 10, quantity: 5 },
        { name: '商品2', price: 20, quantity: 3 },
        { name: '商品3', price: 15, quantity: 2 }
    ])


    const total = computed(()=>{
        return data.reduce((prev:number,next:Data)=>{
            return prev + next.price * next.quantity; 
        },0)
    })

    const _total = computed(()=>{
        const searchResult = search.value; // 获取search计算属性的值
        return searchResult.reduce((prev:number,next:Data)=>{
            return prev + next.price * next.quantity; 
        },0)
    })

    const search = computed(()=>{
        const mysearch = data.filter((product:Data)=>{
            return product.name.includes(keyword.value)
        })
        return mysearch
    })

    const del = (index:number) =>{
        data.splice(index,1)
    }

    const allbuy = () =>{
        showbuy.value=!showbuy.value
    }
</script>

<style>
    .sou{
        color: red;
    }
</style>

3.购物车案例中用到的函数
(1)filter
在JavaScript中,filter()方法是数组对象的一个高阶函数,它用于筛选数组元素并返回一个新的数组,新数组只包含满足特定条件的元素。
filter.html

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Array.filter()</h1>

<p>使用通过测试的所有数组元素创建一个新数组。</p>

<p id="demo"></p>

<script>
var numbers = [45, 4, 9, 16, 25];
var over18 = numbers.filter(myFunction);

document.getElementById("demo").innerHTML = over18;

function myFunction(value, index) {
	console.log("值:",value,"索引:",index)
  return value > 18&index>0;
}
</script>

</body>
</html>

效果图如下:
在这里插入图片描述
以下是示例代码,展示了如何使用filter()方法:

let strings = ["hello", "", "world", "", ""];

let nonEmptyStrings = strings.filter((str) => str !== "");

console.log(nonEmptyStrings); // 输出 ["hello", "world"]

(2)reduce
在JavaScript中,reduce()方法是数组对象的一个高阶函数,它用于对数组中所有元素进行累积计算,并返回一个单一的值。
以下是示例代码,展示了如何使用reduce()方法:
accumulator: 累加器的初始值或上一次回调函数的返回值。
currentValue: 当前被处理的元素。

let strings = ["Hello", " ", "World", "!"];
let result = strings.reduce((accumulator, currentValue) => accumulator + currentValue);

console.log(result); // 输出 "Hello World!"

let numbers = [10, 5, 8, 20, 15];
let maxNumber = numbers.reduce((accumulator, currentValue) => Math.max(accumulator, currentValue));

console.log(maxNumber); // 输出 20

(3)splice
在JavaScript中,splice()方法用于向数组中插入、删除或替换元素,并返回被修改的数组。
splice()方法可以接受多个参数,具体取决于你想要进行的操作:

let fruits = ['apple', 'banana', 'orange', 'mango'];
fruits.splice(2, 1); // 从索引2开始,删除一个元素

console.log(fruits); // 输出:['apple', 'banana', 'mango']

let fruits = ['apple', 'banana', 'mango'];
fruits.splice(1, 0, 'cherry'); // 在索引1处插入'cherry'

console.log(fruits); // 输出:['apple', 'cherry', 'banana', 'mango']

fruits.splice(1, 0, ‘cherry’) 的意思是在 fruits 数组的索引 1 处插入一个新元素 ‘cherry’,并且不删除任何元素(因为第二个参数为 0)。此操作将会改变 fruits 数组,并在索引 1 处插入 ‘cherry’。

let fruits = ['apple', 'banana', 'mango'];
fruits.splice(0, 1, 'grape'); // 替换索引0处的元素为'grape'

console.log(fruits); // 输出:['grape', 'banana', 'mango']

第一个参数表示要进行修改的起始位置(索引),第二个参数表示要删除的元素数量,而后面的参数则是要插入到数组中的新元素。
在这种情况下,splice() 方法会从 fruits 数组的索引 0 处开始,删除 1 个元素,并将 ‘grape’ 插入到此位置。这样就实现了将原来索引 0 处的元素替换为 ‘grape’ 的操作。

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

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

相关文章

linux系统Nginx网站服务

文章目录 一、Nginx简介二、Nginx 相对于 Apache 的优点三、nginx 应用场景1.同步与异步2.阻塞与非阻塞 四、Nginx安装及运行控制1、编译安装2、访问控制1、访问状态统计2、基于授权的访问控制3、基于客户端的访问控制4、基于域名的 Nginx 虚拟主机5、基于IP 的 Nginx 虚拟主机…

2.3ORBSLAM3之相机模型与畸变模型

1.简介 主要内容&#xff1a; 1. 对SLAM中常见的相机模型进行介绍&#xff0c;包括针孔相机模型和鱼眼相机模型 2. 对每种相机模型的畸变模型进行介绍 3. 对VSLAM中常见的几种去畸变方法进行介绍 4. 对常见的几种相机标定方法进行总结对于VSLAM来说关于相机投影模型和畸变模型…

Mybatis如何解决循环依赖问题

1、Mybatis如何解决循环依赖问题 mybatis的循环依赖&#xff0c;即是mapper.xml里面的A查询的resultMap包含了B属性&#xff08;B属性是通过子查询得到的&#xff09;&#xff0c;而B属性中又包含了A&#xff08;B查询的resultMap中又包含了A的查询&#xff09;&#xff0c;就…

【系统架构】第五章-软件工程基础知识(软件测试、净室软件工程、基于构件的软件工程、 软件项目管理)

软考-系统架构设计师知识点提炼-系统架构设计师教程&#xff08;第2版&#xff09; 软件测试 一、测试方法 以测试过程中程序执行状态为依据可分为静态测试&#xff08;ST&#xff09;和动态测试&#xff08;DT&#xff09; 以具体实现算法细节和系统内部结构的相关情况为根据…

【Leetcode60天带刷】day35——452. 用最少数量的箭引爆气球,435. 无重叠区间,763.划分字母区间

​ 题目&#xff1a; 452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可以沿着…

SuperMap GIS基础产品云GIS FAQ集锦(3)

SuperMap GIS基础产品云GIS FAQ集锦&#xff08;3&#xff09; 【iServer】如何自定义iServer服务能力文档中提供者的信息&#xff1f; 【解决办法】操作步骤如下&#xff1a; 1&#xff09;进入iServer管理界面&#xff0c;依次点击服务-服务接口&#xff1b; 2&#xff09;点…

PL SQL结构化编程

第一章、存储过程 1.1、概念 存储过程是一个命名的程序块&#xff0c;包括过程的名称、过程使用的参数&#xff0c;以及过程执行的操作。 &#xff08;类似于java中的一种函数&#xff0c;但是存在区别&#xff09; 可以指定输入参数&#xff0c;和输出参数。 1.2、创建存…

Elasticsearch 地理空间计算

地理位1置搜索&#xff1a;使用查询API进行搜索 1、Geo Distance Query Geo Distance Query是在给定的距离范围内搜索数据的查询。例如&#xff0c;可以搜索给定地理位置附近指定距离内的所有文档。 GET /my_index/_search {"query": {"bool" : {"fi…

基于Python+Django+mysql+html图书管理系统V2.0

基于PythonDjangomysqlhtml图书管理系统V2.0 一、系统介绍二、功能展示1.图书查询2.图书添加3.图书修改4.图书删除5.数据库 三、其它系统四、获取源码 一、系统介绍 该系统实现了图书查询、图书添加&#xff0c;图书修改、图书删除 运行环境&#xff1a;python3.7/mysql5.7以…

STM32单片机(八)DMA直接存储器存取----第二节:DMA直接存储器存取练习1(DMA数据转运)

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

TiDB 7.1资源管控和Oceanbase 4.0多租户使用对比

作者&#xff1a; seiang 原文来源&#xff1a; https://tidb.net/blog/a33d3498 一、背景 TiDB和Oceanbase都是非常优秀的国产分布式数据库&#xff1b;公司从2021年第一套生产业务的TiDB集群落地&#xff0c;随着第一套TiDB生产集群的落地&#xff0c;主要面向不同的业务…

[230607] 阅读TPO69汇总|9:00-10:00

目录 TPO6601 5 事实信息题 7 推理题 9 句子插入题 10 小结题 TPO6602 5 修辞目的题 7 词汇题 tame 10 小结题 TPO6603 TPO6601 5 事实信息题 做题技巧&#xff1a;实词对应 定位在&#xff08;1&#xff09;spread the tines of their tongue apart when they ret…

Greenplum数据库优化器——新Path类型CdbMotionPath

Path表示了一种可能的计算路径&#xff08;比如顺序扫描或哈希关联&#xff09;&#xff0c;更复杂的路径会继承Path结构体并记录更多信息以用于优化。Greenplum为Path结构体(src/include/nodes/relation.h/Path)新加CdbPathLocus locus字段&#xff0c;用于表示结果元组在当前…

ConstraintLayout使用指南

ConstraintLayout ConstraintLayout 可让您使用扁平视图层次结构&#xff08;无嵌套视图组&#xff09;创建复杂的大型布局。它与 RelativeLayout 相似&#xff0c;其中所有的视图均根据同级视图与父布局之间的关系进行布局&#xff0c;但其灵活性要高于 RelativeLayout&#x…

【读书笔记】《软件工程导论》

目录 一、软件工程概述 二、启动阶段 三、计划阶段 四、实施阶段 五、收尾阶段 一、软件工程概述 软件危机&#xff1a;在计算机软件的开发和维护过程中遇到的一系列严重问题。 软件危机的产生与自身的特点有关&#xff0c;还与软件开发、管理的方法不正确有关。 软件危…

ELK 多用户登录

先搭建ELK集群环境 请移步至&#xff1a;FilebeatELK 搭建日志收集平台 ES开启TLS加密通信与身份认证 进入ES集群任意一台安装目录&#xff0c;生成ca证书 这里最好使用ES启动账号操作&#xff0c;证书生成过程中一直回车到完成&#xff0c;不要去输入密码。 # 生成CA证书 bi…

UNIX网络编程卷一 学习笔记 第二十一章 多播

单播地址标识单个IP接口&#xff0c;广播地址标识某个子网的所有IP接口&#xff0c;而多播地址标识一组IP接口。单播和广播是寻址方案的两个极端&#xff08;要么单个要么全部&#xff09;&#xff0c;多播则意在两者之间提供一种折衷方案。多播数据报只应由对它感兴趣的接口接…

【软考网络管理员】2023年软考网管初级常见知识考点(8)-广域网技术

涉及知识点 广域网交换方式&#xff0c;广域网流量控制&#xff0c;广域网链路层协议&#xff0c;广域网传输标准&#xff0c;软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&a…

MATLAB——Matlab R2018b软件安装教程

Matlab R2018b软件安装教程 1.选中【Matlab R2018b】压缩包&#xff0c;鼠标右击选择【解压到Matlab R2018b】。 2.双击打开【Matlab R2018b】文件夹。 3.双击打开【R2018b_win64】文件夹。 4.选中【setup】可执行文件&#xff0c;鼠标右击选择【以管理员身份运行】。 5.选择【…

AQS源码分析——以ReentrantLock为例

AQS自身属性&#xff1a; private transient volatile Node head; private transient volatile Node tail; private volatile int state; Node属性&#xff1a; // 共享 static final Node SHARED new Node(); // 独占 static final Node EXCLUSIVE null; // 线程被…