vue计算属性 初步使用案例

news/2024/11/14 12:18:41 标签: vue.js, javascript, 前端
<template>
  <div>
    <h1>购物车</h1>
    <div v-for="item in filteredItems" :key="item.id">
      <p>{{ item.name }} - {{ item.price }} 元</p>
      <input type="number" v-model.number="item.quantity" min="1" />
      <button @click="removeItem(item.id)">移除</button>
    </div>

    <div>
      <label>
        筛选价格(仅仅筛选单价):
        <select v-model="priceFilter">
          <option value="all">全部</option>
          <option value="under50">小于 50 元</option>
          <option value="50to100">50 - 100 元</option>
          <option value="above100">大于 100 元</option>
        </select>
      </label>
    </div>

    <h2>总价:{{ totalPrice }} 元</h2>
    <button @click="clearCart">清空购物车</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      cartItems: [
        { id: 1, name: "商品 A", price: 30, quantity: 1 },
        { id: 2, name: "商品 B", price: 60, quantity: 1 },
        { id: 3, name: "商品 C", price: 120, quantity: 1 },
      ],
      priceFilter: "all", // 筛选条件
    };
  },
  computed: {
    // 计算总价
    totalPrice() {
      return this.cartItems.reduce(
        (total, item) => total + item.price * item.quantity,
        0
      );
    },
    // 根据筛选条件过滤商品
    filteredItems() {
      if (this.priceFilter === "under50") {
        return this.cartItems.filter((item) => item.price < 50);
      } else if (this.priceFilter === "50to100") {
        return this.cartItems.filter(
          (item) => item.price >= 50 && item.price <= 100
        );
      } else if (this.priceFilter === "above100") {
        return this.cartItems.filter((item) => item.price > 100);
      } else {
        return this.cartItems;
      }
    },
  },
  methods: {
    // 移除商品
    removeItem(id) {
      this.cartItems = this.cartItems.filter((item) => item.id !== id);
    },
    // 清空购物车
    clearCart() {
      this.cartItems = [];
    },
  },
};
</script>

<style scoped>
h1,
h2 {
  color: #333;
}
button {
  margin-top: 10px;
}
</style>

效果展示

(本章节仅仅面向初步学习,页面简陋)

页面由下面代码决定

<template>
  <div>
    <h1>购物车</h1>
    <div v-for="item in filteredItems" :key="item.id">
      <p>{{ item.name }} - {{ item.price }} 元</p>
      <input type="number" v-model.number="item.quantity" min="1" />
      <button @click="removeItem(item.id)">移除</button>
    </div>

    <div>
      <label>
        筛选价格(仅仅筛选单价):
        <select v-model="priceFilter">
          <option value="all">全部</option>
          <option value="under50">小于 50 元</option>
          <option value="50to100">50 - 100 元</option>
          <option value="above100">大于 100 元</option>
        </select>
      </label>
    </div>

    <h2>总价:{{ totalPrice }} 元</h2>
    <button @click="clearCart">清空购物车</button>
  </div>
</template>

其中 用v-for循环进行页面打印表单。

computed是计算属性,它与data同级代码块。

这个页面,由计算属性来操控。

我们的筛选板块,

用v-model对priceFilter进行了双向数据帮当,单选每一项的时候,会改变其值。

在我们的计算属性当中 

会根据我们单项筛选,进行相应的页面展示,计算属性类似于函数,也有其返回值,返回值可以是个数组。

计算属性可以写多个 如同函数类似,

totalPrice()用于计算总价格

计算属性可用于插值表达式


http://www.niftyadmin.cn/n/5751886.html

相关文章

Rust 所有权机制

Rust 所有权机制 本文示例代码地址 所有权是Rust中最独特的特性&#xff0c;它让Rust无需GC就可以保证内存安全。 什么是所有权&#xff1f; 所有权&#xff08;ownership&#xff09;是 Rust 用于如何管理内存的一组规则。所有程序都必须管理其运行时使用计算机内存的方式…

contos7.9 部署3节点 hadoop3.4 集群 非高可用

contos7.9 部署3节点 hadoop3.4 集群 非高可用 contos7.9 部署3节点 hadoop3.4 集群 非高可用环境信息服务器角色分配服务器配置服务器配置初始化 init_server.sh配置主机名映射所有节点配置 hosts文件 配置免密登录 hadoop 安装环境配置下载安装包下载 jdk1.8hadoop3.4 分发安…

巧妙注入的奥秘:在 Spring 中优雅地使用 List 和 Map

文章目录 一、注入 List&#xff1a;同类项&#xff0c;一次拿下二、注入 Map&#xff1a;当键值对遇上多态三、进阶&#xff1a;使用 Qualifier 灵活注入四、总结总结推荐阅读文章 在 Spring 框架里&#xff0c;我们经常需要将不同的组件组织到集合中&#xff0c;比如在注入多…

比较两个XML文件的差异

import xml.etree.ElementTree as ET def find_diff(elem1, elem2, path""): """递归查找两个Element对象的差异""" diff [] # 比较元素的标签 if elem1.tag ! elem2.tag: diff.append(f"{path}: tag …

《基于Oracle的SQL优化》读书笔记

查看执行计划set autotrace traceonly explain在当前session中将优化器模式改为RULE。alter session set optimizer_modeRULE;统计信息存储在oracle的数据字典里&#xff0c;且从多个维度描述了oracle数据库里相关对象的实际数据量&#xff0c;实际数据分布等详细信息。 -- 对…

设计模式(四)装饰器模式与命令模式

一、装饰器模式 1、意图 动态增加功能&#xff0c;相比于继承更加灵活 2、类图 Component(VisualComponent)&#xff1a;定义一个对象接口&#xff0c;可以给这些对象动态地添加职责。ConcreteComponent(TextView)&#xff1a;定义一个对象&#xff0c;可以给这个对象添加一…

linux系统kkFileView 配置https预览文件

思路&#xff1a; 1.kkfile的 context全局路径可以修改 context-path,比如&#xff1a;server.servlet.context-path 2.使用nginx反向代理 /kkfile 转发到 kkfile路径上 官网教程 ​​​​​​kkFileView - 在线文件预览 1、配置config/application.properties. server.se…

golang分布式缓存项目 Day2 单机并发缓存

注&#xff1a;该项目原作者&#xff1a;https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 支持并发读写 接下来我们使用 sync.Mutex 封装 LRU 的几个方法&#xff0c;使之支持并发的读写。在这之…