【Vue】——组件的注册与引用

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯本文目的

🎯实现书籍查询

🎃在src/components文件下创建LifecycleHooks1.vue组件

🎃在src/components文件下创建LifecycleHooks2.vue组件,实现书籍查询

🎃运行效果

🎯商品菜单效果

🎃要求

🎃代码解析

🎃运行效果


🎯本文目的

(一)理解vue3.0中的选项式API与组合式API;

(二)理解组件的生命周期函数;

(三)掌握工程化vue项目中组件的注册与引用;

🎯实现书籍查询

🎃在src/components文件下创建LifecycleHooks1.vue组件

<!-- 生命周期函数 -->
<template>
    <div class="container">container</div>
</template>
<script setup>
import { onBeforeMount, onMounted } from 'vue'
onBeforeMount(() => {
    console.log('DOM元素渲染前', document.querySelector('.container'))
})
onMounted(() => {
    console.log('DOM元素渲染后', document.querySelector('.container'))
})
</script>

        这段代码是Vue.js框架中的一段生命周期函数示例。在Vue.js中,生命周期钩子是用来在组件的某个特定阶段执行一些操作的函数。

        首先,我们看到一个HTML模板,它定义了一个名为"container"的div元素。

        然后,我们导入了两个生命周期钩子:onBeforeMount和onMounted。这两个钩子都是Vue.js提供的API,用于在DOM元素渲染前后执行一些操作。

onBeforeMount钩子会在DOM元素渲染前被调用。在这个钩子中,我们使用document.querySelector方法来获取页面上的.container元素,并在控制台打印出"DOM元素渲染前"和该元素的引用。

onMounted钩子会在DOM元素渲染后被调用。在这个钩子中,我们同样使用document.querySelector方法来获取页面上的.container元素,并在控制台打印出"DOM元素渲染后"和该元素的引用。

        这段代码的主要目的是展示Vue.js生命周期钩子的使用方法。通过在DOM元素渲染前后执行一些操作,我们可以更好地理解和掌握Vue.js的生命周期钩子。

🎃在src/components文件下创建LifecycleHooks2.vue组件,实现书籍查询

<!-- 生命周期函数 -->
<template>
    请输入书籍关键字:
    <input type="text" v-model="state.mytext" />
    <p></p>
    查询结果:
    <ul>
      <li v-for="(item, index) in computedList"  :key="index">
        {{ item }}
      </li>
    </ul>
  </template>
  
  <script setup>
  import { reactive, onMounted,computed } from 'vue'
  const state = reactive({
    mytext: '',
    list: []
  })
  onMounted(() => {   //生命周期函数onMounted,经常在该函数中获取组件所需要的数据
    fetch('/src/assets/test.json')   //利用fetch从test.json中异步获取数据
      .then(res => res.json())
      .then(res => {
        state.list = res.list    //res.list即获取到的数据
        console.log(state.list)  //可以在控制台下查看获取的数据
      })
  })
  const computedList = computed(() => {   //根据关键字,计算查询结果
    const newlist = state.list.filter(item => item.includes(state.mytext))
    return newlist
  })
  </script>
  

        这段代码是一个Vue.js组件,用于根据用户输入的关键字查询书籍列表。下面是对代码的解释和分析:

1. 生命周期函数:`onMounted`是Vue.js中的一个生命周期钩子函数,它在组件挂载到DOM后立即调用。在这个例子中,它被用来在组件加载时获取数据。

2. 数据获取:使用`fetch`函数从`test.json`文件中异步获取数据。`fetch`返回一个Promise对象,通过链式调用`then`方法来处理异步操作的结果。首先,将响应转换为JSON格式,然后将获取到的数据赋值给`state.list`。

3. 计算属性:`computedList`是一个计算属性,它根据用户输入的关键字动态计算查询结果。当`state.mytext`发生变化时,`computedList`会自动重新计算。

4. 模板渲染:在模板部分,使用`v-model`指令将输入框的值与`state.mytext`进行双向绑定。然后使用`v-for`指令遍历`computedList`,将每个查询结果渲染为一个列表项。

5. 优化建议:目前代码中的查询逻辑是在每次输入关键字时都重新计算整个列表,这可能会导致性能问题。可以考虑使用防抖(debounce)或节流(throttle)技术来优化查询性能,避免频繁的计算。

        综上所述,这段代码的主要功能是根据用户输入的关键字查询书籍列表,并在页面上显示查询结果。它使用了Vue.js的生命周期钩子、计算属性和模板渲染等特性来实现这个功能。

🎃运行效果

🎯商品菜单效果

🎃要求

  1. 在该页面中可以完成如下功能:
  2. 单击每行后面的“移除”按钮可以删除相应的行。
  3. 单击“-”与“+”按钮可以修改购买数量。
  4. 利用jQuery完成“全选/全不选”复选框与下面复选框的联动效果。
  5. 计算用户选中商品的总价格。

🎃代码解析

<template>
    <h1>商品列表展示-软工</h1>
    <table>
      <thead>
        <tr>
          <th>序号</th>
          <th>商品名称</th>
          <th>商品单价</th>
          <th>购买数量</th>
          <th>操作</th>
          <th>
            <input type="checkbox" id="checkBoxAll" @click="all" />全选/全不选
          </th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(item, index) in list" :key="item.id">
          <td>{{ index + 1 }}</td>
          <td>{{ item.name }}</td>
          <td>{{ item.price }}</td>
          <td>
            <button class="btn" @click="sub(item.id)">-</button>
            {{ item.count }}
            <button class="btn" @click="add(item.id)">+</button>
          </td>
          <td>
            <button class="btns" @click="del(item.id)">移除</button>
          </td>
          <td>
            <input type="checkbox" name="list" @click="each" />
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="6">总价:¥{{totalPrice}}</td>
        </tr>
      </tfoot>
    </table>
  </template>
  
  <script setup>

  import { reactive,ref } from 'vue';
  import $ from "jquery"
  //“全选/全不选”复选框控制下面复选框
const all = () => {
  const flag = $("#checkBoxAll").prop("checked");
  $("[name='list']").prop("checked", flag);
}
//下面复选框控制“全选/全不选” 复选框
const each = () => {
  if ($("[name='list']:checked").length == $("[name='list']").length)
    $("#checkBoxAll").prop("checked", true);
  else $("#checkBoxAll").prop("checked", false);
  total();

}


  const list = reactive([
    { id: 1, name: "iPhone 7", price: 6188, count: 1, },
    { id: 2, name: "iPad Pro", price: 5888, count: 1, },
    { id: 3, name: "MaxBook Pro", price: 21488, count: 1, },
    { id: 4, name: "SAMSUNG GalaxyS22", price: 3649, count: 1, },
    { id: 5, name: "HUAWEI P60", price: 4488, count: 1, }
  ])

  const sub=(id)=>{
    const findResult=list.find(function(x){
        return x.id===id
    });
    if(findResult&&findResult.count>1){
        findResult.count--;
    }
    total();
  }
  const add=(id)=>{
    const findResult=list.find(function(x){
        return x.id===id;
    })
    if(findResult){
        findResult.count++;
    }
    total();

  }
  const del=(id)=>{
    list.some((x,index)=>{
        if(x.id==id){
            list.splice(index,1);
        }
        return;
    });
    total();
  }
  //计算总价
const totalPrice = ref(0)
const total = () => {
  var t = 0;
  list.forEach(function (item, index) {
    if ($("input[name='list']").eq(index).is(":checked"))
      t += item.price*item.count;
  })
  totalPrice.value = t;
}

  </script>
  <style scoped>
  h1{text-align: center;}
  table {
    border: 1px solid #e9e9e9e9;
    border-collapse: collapse;
    border-spacing: 0;
    margin: 0 auto;
  }
  
  th,
  td {
    padding: 8px 16px;
    border: 1px solid #e9e9e9e9;
  }
  
  th {
    background: #f7f7f7;
    color: #5c6c77;
    font-weight: 600;
    white-space: nowrap;
  }
  
  .btn {
    width: 20px;
    height: 20px;
    border-radius: 50%;
    border: 1px solid #cccccc;
    background: #ffffff;
    color: #778899;
  }
  
  .btns {
    width: 50px;
    height: 20px;
    border-radius: 5px;
    border: 1px solid #cccccc;
    background: #ffffff;
    color: #778899;
    line-height: 20px;
  }
  </style>
  

        这段代码是一个基于Vue.js的前端商品列表展示页面。它包括一个表格,用于显示商品的详细信息,如序号、商品名称、商品单价、购买数量等。同时,它还提供了一些操作按钮,如增加购买数量、减少购买数量和移除商品等功能。

        首先,我们来看一下HTML部分。这部分主要定义了页面的结构,包括一个标题和一个表格。表格的每一行代表一个商品,每一列代表一种信息。在表头部分,还有一个全选/全不选的复选框,用于控制所有商品的选中状态。在表尾部分,显示了商品的总价。

        接下来,我们来看一下JavaScript部分。这部分主要定义了页面的行为,包括如何响应用户的点击事件。例如,当用户点击“全选/全不选”复选框时,会选中或取消选中所有的商品;当用户点击每个商品的复选框时,会根据选中的商品数量更新“全选/全不选”复选框的状态;当用户点击“-”或“+”按钮时,会增加或减少对应商品的购买数量;当用户点击“移除”按钮时,会从列表中移除对应的商品。此外,还定义了一个计算总价的函数,它会遍历所有的商品,将选中的商品的价格乘以其购买数量,然后累加起来,得到总价。

        最后,我们来看一下CSS部分。这部分主要定义了页面的样式,包括字体、颜色、边距、背景色等。

        总的来说,这段代码实现了一个简单的商品列表展示页面,用户可以查看商品的详细信息,也可以进行一些基本的操作,如增加购买数量、减少购买数量和移除商品等。

🎃运行效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大泽动力30KW静音汽油发电机

安全操作&#xff1a; 在使用前&#xff0c;确保发电机放置在通风良好、干燥、无易燃物品的地方。 避免在发电机运行时触摸其热表面或运转部件&#xff0c;以免烫伤或受伤。 遵循发电机的启动和停机程序&#xff0c;不要随意操作。 燃油管理&#xff1a; 使用高质量的汽油&…

【C/C++】IO流

目录 前言&#xff1a; 一&#xff0c;C语言的I/O流 二&#xff0c;C的I/O流 2-1&#xff0c;C标准IO流 2-2&#xff0c;IO流的连续输入 前言&#xff1a; “流”即是流动的意思&#xff0c;是物质从一处向另一处流动的过程&#xff0c;是对一种有序连续且具有方向性的数据…

地面站Mission planner

官方教程; Mission Planner地面站介绍 | Autopilot (gitbook.io) Mission Planner 功能/屏幕 — Mission Planner 文档 (ardupilot.org) 安卓或者windows软件下载地址&#xff1a; 地面站连接及使用 plane (cuav.net) 在完全装机后再进行各干器件的校准&#xff0c;没有组…

【十大排序算法】插入排序

插入排序&#xff0c;如一位细心的整理者&#xff0c; 她从序列的左端开始&#xff0c; 挨个将元素归位。 每当她遇到一个无序的元素&#xff0c; 便将它插入已经有序的部分&#xff0c; 直至所有元素有序排列。 她不张扬&#xff0c;却有效率&#xff0c; 用自己的方式&…

如何恢复已删除的文件(简单5 分钟方法)

本文介绍如何使用文件恢复程序恢复已删除的文件。其中包括与恢复已删除文件相关的提示。 如何恢复已删除的文件 从硬盘中恢复已删除的文件并不是一件疯狂的事情&#xff0c;但一旦意识到文件已被删除&#xff0c;尝试恢复会有所帮助。被删除的文件通常直到被其他文件覆盖后才真…

如何在Python中向Word文档添加段落

如何在Python中向Word文档添加段落 添加段落代码解析添加前与添加后 在这篇博客文章中&#xff0c;我们使用Python向Word文档添加段落。 添加段落 from docx import Document# 打开一个现有的Word文档 doc Document(rC:\Users\Administrator\Desktop\Word文档\example.docx)…

02Linux文件,目录,过滤,管道常用命令

Linux基础概述 Linux基础目录 Linux没有盘符这个概念, 只有一个顶级根目录 /, 所有文件都在它下面 在Windows系统中路径之间的层级关系使用/来表示在Linux系统中路径之间的层级关系使用/来表示,出现在开头的/表示根目录, /home/a.txt表示根目录下的home文件夹内有a.txt文件 …

Python中__面向对象__学习 (上)

目录 一、类和对象 1.类的定义 2.根据对象创建类 二、构造和析构 1.构造方法 &#xff08;1&#xff09;不带参数的构造方法 &#xff08;2&#xff09;带参数的构造方法 2.析构方法 三、重载 1.定制对象的字符串形式 &#xff08;1&#xff09;只重载__str__方法 …

STM32 HAL库开发——入门篇(3):OLED、LCD

源自正点原子视频教程&#xff1a; 【正点原子】手把手教你学STM32 HAL库开发全集【真人出镜】STM32入门教学视频教程 单片机 嵌入式_哔哩哔哩_bilibili 一、OLED 二、内存保护&#xff08;MPU&#xff09;实验 2.1 内存保护单元 三、LCD 3.1 显示屏分类 3.2 LCD简介 3.3 LCD…

【JAVASE】日期与时间类(上)

一&#xff1a;概述 从JAVA SE 8开始提供了java.time包&#xff0c;该包中有专门处理日期和时间的类。 LocalDate LocalDateTime 和LocalTime 类的对象封装和日期、时间有关的数据&#xff0c;这三个类都是final类&#xff0c;而且不提供修改数据的方法&#xff0c;即这…

ai辅助教育孩子

孩子经常躺在床上看手机是一个需要关注的问题&#xff0c;因为这不仅可能影响他们的视力健康&#xff0c;还可能影响睡眠质量和身体健康。以下是一些建议&#xff0c;帮助应对这一问题&#xff1a; 设定明确的规定&#xff1a; 与孩子一起制定使用手机的规则&#xff0c;如每天…

前端多人项目开发中,如何保证CSS样式不冲突?

在前端项目开发中&#xff0c;例如突然来了一个大项目&#xff0c;很可能就需要多人一起开发&#xff0c;领导说了&#xff0c;要快&#xff0c;要快&#xff0c;要快&#xff0c;你们给我快。然后下面大伙就一拥而上&#xff0c;干着干着发现&#xff0c;一更新代码&#xff0…

LiDAR360MLS 7.2.0 雷达点云数据处理软件功能介绍

新增模块和功能: 支持手持、背包数据的解算 SLAM解算成功率提升 SLAM解算效率提升 采集端与后处理端保持一致 赋色优化 新增平面图模块 新增平面图全自动矢量化功能 新增平面图矢量一键导出DXF功能 新增平面图正射影像一键导出功能 支持交叉、垂直绘制 支…

添加west扩展命令

使用west工具的帮助命令&#xff0c;west -h&#xff0c;不仅可以列出west工具的内置命令&#xff0c;也可以列举当前工程中实现的扩展命令&#xff0c;如build&#xff0c;flash等。 本文将介绍如何添加扩展命令。 west扩展命令的位置通过以下方式查找&#xff1a; 1. 首先找…

python-自幂数判断

[题目描述]&#xff1a; 自幂数是指&#xff0c;一个N 位数&#xff0c;满足各位数字N 次方之和是本身。例如&#xff0c;153153 是 33 位数&#xff0c;其每位数的 33 次方之和&#xff0c;135333153135333153&#xff0c;因此 153153 是自幂数&#xff1b;16341634 是 44 位数…

react的自定义组件

// 自定义组件(首字母必须大写) function Button() {return <button>click me</button>; } const Button1()>{return <button>click me1</button>; }// 使用组件 function App() {return (<div className"App">{/* // 自闭和引用自…

Springboot 通过SSE 实现实时消息返回

网上搜了好多都是用 SseEmitter 实现的,自己搭的demo确实也可以了,但是我项目里有一个过滤器,死活配置都不行,终于用google搜了一下,第一篇帖子便解决了这个问题,代码和大佬链接如下: https://github.com/CodingChaozhang/spring_boot_practice_demo/blob/master/springboot_s…

基于电荷的EPFL HEMT模型

来源&#xff1a;Charge-Based EPFL HEMT Model&#xff08;TED 19年&#xff09; 摘要 本文介绍了一种面向设计的、基于电荷的模型&#xff0c;用于直流操作下的AlGaAs/GaAs和AlGaN/GaN高迁移率场效应晶体管。该固有模型基于物理原理&#xff0c;不引入任何经验参数。核心概…

vuInhub靶场实战系列--prime:2

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

Hadoop+Spark大数据技术 实验11 Spark 图

17周期末考试 重点从第五章 scala语言开始 比如&#xff1a;映射&#xff08;匿名函数&#xff09; 11.3.1创建属性图 import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD //创建一个顶点集的RDD val users: RDD[(VertexId ,(String,String))] sc.paralle…