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

news2025/1/21 18:47:23

💻博主现有专栏:

                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部分。这部分主要定义了页面的样式,包括字体、颜色、边距、背景色等。

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

🎃运行效果

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

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

相关文章

【Java面试】九、微服务篇-SpringCloud(上)

文章目录 1、SpringCloud五大组件2、服务注册和发现2.1 Eurake2.2 Eurake和Nacos的区别 3、Ribbon负载均衡3.1 策略3.2 自定义负载均衡策略 4、服务雪崩与熔断降级4.1 服务雪崩4.2 服务降级4.3 服务熔断 5、服务限流5.1 Nginx限流5.2 网关限流 6、微服务监控7、面试 1、SpringC…

antd vue a-select 搜索

数据结构 list: [{ name: "序号", id: 0, show: true },{ name: "出库单编号", id: 1, show: false },{ name: "wbs元素", id: 2, show: true },{ name: "序号1", id: 3, show: true },{ name: "出库单编号1", id: 4, show…

每天五分钟深度学习pytorch:pytorch中的广播机制是什么?

本文重点 在pytorch中经常有张量和张量之间的运算,那么有一点需要注意,那就是维度要匹配,如果维度不匹配就有可能出现问题。如果维度不一致,此时也可以同时进行操作,此时就需要使用pytorch中的广播机制,本节课程就讲解pytorch中的广播机制。 广播机制示意图 如上就是py…

基于C#的计算机与安捷伦34970A通信方法

概述 安捷伦34970A采集数据&#xff0c;34970A支持RS232接口&#xff0c;但是如果直接用winform自带的seriaport类基本是没必要使用的&#xff0c;安捷伦等仪表通讯需要用到VISA的库。 库的获取 1. 是德科技的IO Library. 2. NI下载NI-VISA. 两者用法接近. 代码如下 using…

【数据分析基础】实验numpy、pandas和matplolib

文件score.xlsx 中存放了学生的各个科目的考试成绩&#xff08;如下图&#xff09;&#xff0c; 1. 编程实现&#xff1a;输入任意一个学号&#xff0c;将该学号对应的成绩&#xff0c;通过雷达图显示。 &#xff08;1&#xff09;程序代码&#xff1a; import pandas as pd…

在Java中使用SeleniumAPI,超详细

Java中 Selenium相关操作 1 定位元素 1.1 css选择器定位元素 就是定位到页面的元素&#xff0c;本质上就是一个一个的语法 下面举几个具体的例子&#xff1a; 类选择器 按照给定的 class 属性的值&#xff0c;选择所有匹配的元素。 语法&#xff1a;.classname 例子&am…

【中篇】从 YOLOv1 到 YOLOv8 的 YOLO 物体检测模型历史

YOLO 型号之所以闻名遐迩,主要有两个原因:其速度和准确性令人印象深刻,而且能够快速、可靠地检测图像中的物体。上回我解释了Yolo v1, 今天从Yolov2开始。 YOLOv2:更好、更快、更强 2017 年 7 月一个闷热的星期二下午,雷德蒙(Joseph Redmon, Yolo创始人)再次走上舞台。 …

MASA:匹配一切、分割一切、跟踪一切

摘要 在复杂场景中跨视频帧稳健地关联相同对象是许多应用的关键&#xff0c;特别是多目标跟踪&#xff08;MOT&#xff09;。当前方法主要依赖于标注的特定领域视频数据集&#xff0c;这限制了学习到的相似度嵌入的跨域泛化能力。我们提出了MASA&#xff0c;一种新颖的方法用于…

嵌入式Linux系统编程 — 3.1 Linux系统中的文件类型

目录 1 Linux 系统中的文件类型简介 2 普通文件 2.1 什么是普通文件 2.2 普通文件分类 3 目录文件 4 字符设备文件和块设备文件 4.1 什么是设备文件 4.2 查看设备文件的方法&#xff1a; 5 符号链接文件&#xff08;link&#xff09; 5.1 什么是符号链接文件 5.2 如…

生成式人工智能 - stable diffusion web-ui安装教程

一、Stable Diffusion WEB UI 屌丝劲发作了,所以本地调试了Stable Diffusion之后,就去看了一下Stable Diffusion WEB UI,网络上各种打包套件什么的好像很火。国内的也就这个层次了,老外搞创新,国内跟着屁股后面搞搞应用层,就叫大神了。 不扯闲篇了,我们这里从git源码直接…

【vscode-快捷键 一键JSON格式化】

网上有很多JSON格式化工具&#xff0c;也有很多好用的在线json格式化工具。但是其实Vscode里面的可以直接格式化JSON&#xff0c;这里分享一个我常用的小插件 Prettify JSON 未格式化的JSON数据 召唤出命令行&#xff0c;输入prettify JSON 即可! ✿✿ヽ(▽)ノ✿

C# WinForm —— 26 ImageList 介绍

1. 简介 图片集合&#xff0c;用于存储图像的资源&#xff0c;并在关联控件中显示出来 可以通过 索引、键名 访问每张图片 没有事件 2. 属性 属性解释(Name)控件ID&#xff0c;在代码里引用的时候会用到,一般以 imgList 开头ClolorDepth用于呈现图像的颜色数&#xff0c;默…

立创小tips

立创小tips 原理图中 1-修改图纸属性 保存完&#xff0c;绘制原理图的界面就出现了&#xff0c;然后我们鼠标点击原理图的边缘变成红色就可以高边表格的属性了。 2-鼠标右键可以移动整个原理图 3-查看封装 点击任意一个元器件&#xff0c;在右侧就会显示封装属性&#xff…

9.1 Go 接口的定义

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于日间-日内不确定集的中长期电源扩展规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

输入偏置电流是什么?

输入失调电流与输入补偿电流概念一样&#xff08;input offset current&#xff09;&#xff1a;同相减去反相输入端偏置电流的差值。这是由生产工艺导致同相与反相端的电流大小方向都会有所不同。 第一种情况&#xff1a;同相输入端减去反相输入端 第一种情况&#xff1a;同相…

使用cv2控制鼠标实现circle的拖拽

2.代码 import numpy as np import cv2x_center [100,200,300,400] y_center [200,200,200,200] radius 30def mouse_LButtonDown(event, x, y, flags, param):global tempif event cv2.EVENT_LBUTTONDOWN:print(f" Down Clicked at ({x}, {y})")for i in range…

利用PowerQuery控制数据行数

PowerBI报表在开发的过程中&#xff0c;经常会遇到数据量非常庞大的情况&#xff0c;在这种情况下&#xff0c;本机连接数据源如果不进行特殊处理的话&#xff0c;那么刷新数据的时候可能会发生数据刷新时间过长、数据加载内存错误、开发过程中构建DAX卡顿等情况。 那么在实际开…

为下一波创新做准备:人工智能和元宇宙

人工智能和元宇宙的发展带来了独特的可能性和挑战。随着这些技术的发展&#xff0c;我们进入了一个沉浸式虚拟体验和智能系统的时代&#xff0c;我们正站在一个历史性的时刻。为迎接下一波创新&#xff0c;采取必要的措施是很重要的。 我们正在见证两项变革性技术的激动人心的发…

【MySQL】MySQL 图形化界面 - 使用说明(MySQL Workbench)

一、安装软件 Navicat&#xff0c;SQLyog 这些软件都不错&#xff0c;不过都需要收费&#xff0c;当然也有破解版。下面用 MySQL Workbench&#xff0c;它是官方提供的工具。 二、使用操作 这个软件本质是一个客户端&#xff0c;现在要让数据库能够远程登录。不过一般不会远程…