当前位置: 首页 > news >正文

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

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

🎃运行效果

相关文章:

  • 默认launcher
  • 鸿蒙OS初识
  • Python的Pillow(图像处理库)的一些学习笔记
  • docker实战命令大全
  • 【Python】使用flask作为web服务器
  • “薅羊毛”到被“割韭菜”,警惕网络副业陷井
  • 基于电荷的EPFL HEMT模型
  • 使用Ollama+OpenWebUI本地部署Gemma谷歌AI开放大模型完整指南
  • 【论文速读 | USENIX Security‘2022】Debloating Address Sanitizer
  • Python下载库
  • unity中常见的角色控制方法
  • 十种排序算法的python实现
  • 把qml程序制作成安装包(Windows)
  • C++查看编译后的代码
  • Springboot jar运行时,将jar内的文件拷贝到文件系统中
  • #Java异常处理
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【面试系列】之二:关于js原型
  • Apache的基本使用
  • js面向对象
  • React-flux杂记
  • vagrant 添加本地 box 安装 laravel homestead
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 基于组件的设计工作流与界面抽象
  • 七牛云假注销小指南
  • 数据可视化之 Sankey 桑基图的实现
  • 智能合约开发环境搭建及Hello World合约
  • 追踪解析 FutureTask 源码
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​Spring Boot 分片上传文件
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • # centos7下FFmpeg环境部署记录
  • # 安徽锐锋科技IDMS系统简介
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (Python第六天)文件处理
  • (ros//EnvironmentVariables)ros环境变量
  • (补充)IDEA项目结构
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (五)MySQL的备份及恢复
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转) Face-Resources
  • (转)ORM
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net 按比例显示图片的缩略图
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .NET的微型Web框架 Nancy
  • .net项目IIS、VS 附加进程调试
  • 。。。。。
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...