谷粒商城实战笔记-48~49-商品服务-API-三级分类-查询-树形展示三级分类数据-前端优化

文章目录

  • 一,48-商品服务-API-三级分类-查询-树形展示三级分类数据
    • 1,创建商品服务命名空间
    • 2,商品服务增加配置
    • 3,网关增加商品服务的路由配置
    • 4,前端树形展示
    • 5,测试
  • 二,49-商品服务-API-三级分类-删除-页面效果
    • 1,支持编辑三级分类
    • 2,体验优化
    • 完整代码
  • 高效干活:nacos快速启动

本节的主要内容是前后端联调,解决网关到商品服务的路由配置、前端的树形展示、已经前端的功能增加和体验优化。

一,48-商品服务-API-三级分类-查询-树形展示三级分类数据

1,创建商品服务命名空间

在nacos上创建product命名空间,所有商品服务相关的配置都放在这个空间。

在这里插入图片描述

把商品服务数据库相关的配置从本地迁移到nacos。

在这里插入图片描述

2,商品服务增加配置

商品服务增加bootstrap.yml配置文件,其中包含nacos配置中心信息:

  • 配置中心地址
  • 配置中心命名空间
  • 服务名称
spring:cloud:nacos:config:server-addr: 127.0.0.1:8848namespace: 709272d4-12a3-4657-b039-af32012c794fapplication:name: gulimall-product

3,网关增加商品服务的路由配置

网关配置路由。

        - id: gulimall-producturi: lb://gulimall-productpredicates:- Path=/api/product/**filters:- RewritePath=/api/(?<segment>.*),/$\{segment}

在这里插入图片描述
这段配置是Spring Cloud Gateway的路由规则定义,它用于将特定的HTTP请求转发到微服务后端。下面是配置的详细解释:

  • id: gulimall-product:
    这是路由的唯一标识符,可以帮助你在配置中引用这个路由规则。

  • uri: lb://gulimall-product:
    这指定了当匹配路由规则时,请求应该被转发到哪个服务。这里的lb://表示使用负载均衡方式调用服务。gulimall-product是服务名,通常在服务发现机制(如Netflix Eureka、Consul等)中注册的服务实例会被查找。

  • predicates:
    这是一个谓词列表,用于定义哪些请求应该被此路由规则处理。这里的Path=/api/product/**表示任何以/api/product/开头的URL路径都会匹配这个规则。

  • filters:
    路由过滤器允许对请求和响应进行修改。这里的RewritePath=/api/(?<segment>.*),/$\{segment}是一个路径重写过滤器,其作用是将原始请求路径中的/api/部分移除,然后将剩余部分转发给目标服务。

    • /(?<segment>.*?): 这个正则表达式捕获从/api/开始直到下一个/前的所有字符(包括多个层级的路径),并将这部分保存为名为segment的组。
    • ,/$\{segment}: 这个字符串模板告诉Spring Cloud Gateway将捕获的segment值替换回URL中,但不包含/api/这部分。

举个例子,如果客户端发送一个请求到http://localhost:8080/api/product/list,根据上述配置,这个请求将会被重写为http://gulimall-product/list(假设gulimall-product服务监听在默认端口上),从而绕过/api/前缀直接转发给gulimall-product服务。

4,前端树形展示

为了将三级分类在前端以树形结构进行展示,需要对组件category.vue做几处调整。

在这里插入图片描述

  • 将数组名改为menus,更容易读
  • label改为name,是因为后台数据中分类名称字段名是那么

此外,请求接口获得分类数据后,为数组menus赋值。
在这里插入图片描述
完整代码

<template><el-tree:data="menus":props="defaultProps"@node-click="handleNodeClick"></el-tree>
</template><script>
export default {components: {},props: {},data () {return {menus: [],defaultProps: {children: 'children',label: 'name',},}},methods: {handleNodeClick (data) {console.log(data)},// 获取分类数据getDataList () {this.dataListLoading = truethis.$http({url: this.$http.adornUrl('/product/category/list/tree'),method: 'get'}).then(({data}) => {console.log(data)this.dataListLoading = falsethis.menus = data.data})}},created() {this.getDataList()  // 获取分类数据}
}
</script>
<style scoped>
</style>

5,测试

在浏览器中访问,发现商品分类已经以树形结构进行展示了。

在这里插入图片描述

二,49-商品服务-API-三级分类-删除-页面效果

这一节的内容是优化前端界面,增加下列特性。

1,支持编辑三级分类

在每个三级分类后面增加两个按钮:

  • append,每个分类增加子分类
  • delete,删除当前分类

在这里插入图片描述

要实现这个效果,参考官网,在el-tree标签下增加如下代码。

<span class="custom-tree-node" slot-scope="{ node, data }"><span>{{ node.label }}</span><span><el-button type="text" size="mini" @click="() => append(data)">Append</el-button><el-button type="text" size="mini" @click="() => remove(node, data)">Delete</el-button></span></span>

在这里插入图片描述

同时,脚本下增加两个相对应的函数。

在这里插入图片描述
保存代码,刷新浏览器界面,两个按钮就会出现分类后。

2,体验优化

①点击append和delete按钮时,不要收缩分类树

el-tree绑定属性即可::expand-on-click-node="false"

②一级和二级分类才能append子分类,三级分类不能append

使用v-if结合分类数据的结构,满足条件才展示响应的按钮。

在这里插入图片描述

在Vue.js中,v-if是一个条件渲染指令,它根据表达式的真假来判断是否应该渲染一段代码。当表达式的结果为真时,对应的元素或片段将被插入到DOM中;反之,如果结果为假,则对应的元素或片段将不会被渲染,也就是说,它们完全不会存在于最终的DOM树中。

现在分析一下代码段:

<el-button v-if="node.level<=2" size="mini" @click="() => append(data)">Append
</el-button>
<el-button v-if="node.childNodes.length==0" type="text" size="mini" @click="() => remove(node, data)">Delete
</el-button>

两个<el-button>标签,每个都使用了v-if指令:

  • ①第一个按钮的v-if条件是node.level<= 2。这意味着只有当node.level属性的值小于等于2时,这个按钮才会被渲染。

  • ②第二个按钮的v-if条件是node.childNodes.length == 0。这意味着只有当节点没有子节点时,“Delete”按钮才会被渲染,只允许删除没有子节点的节点。

③增加复选框

在这里插入图片描述
el-tree增加show-checkbox属性,即可显示复选框。
在这里插入图片描述
④el-tree增加node-key在这里插入图片描述

在Element UI的el-tree组件中,node-key属性用于指定树节点的唯一标识符。在树形结构的数据集中,每个节点通常都有一个唯一的ID或键,用来区分不同的节点。node-key属性就是用来告诉el-tree组件使用哪个字段作为节点的唯一标识。

作用:

①唯一标识:通过node-key属性,你可以指定树节点数据模型中哪个字段的值作为节点的唯一标识符。这在处理复杂的树形数据结构时非常有用,因为每个节点的标识符需要是全局唯一的,以避免在操作节点(如展开、折叠、选择、删除等)时产生冲突。

②性能优化:使用node-key可以提高el-tree组件在大数据量下的性能,尤其是在节点频繁变动的情况下。这是因为当el-tree内部需要查找或操作某个节点时,它可以快速定位到该节点,而无需遍历整个树。

③状态管理:在使用el-tree时,组件可能会存储某些状态信息,比如哪些节点被选中或展开。node-key属性的值可以帮助组件在更新状态时准确地追踪和识别每个节点。

完整代码

<template><el-tree node-key="catId" :data="menus" :props="defaultProps" :expand-on-click-node="false" show-checkbox><span class="custom-tree-node" slot-scope="{ node, data }" ><span>{{ node.label }}</span><span><el-button v-if="node.level<=2" size="mini" @click="() => append(data)">Append</el-button><el-button v-if="node.childNodes.length==0" type="text" size="mini" @click="() => remove(node, data)">Delete</el-button></span></span></el-tree>
</template><script>
export default {components: {},props: {},data() {return {menus: [],defaultProps: {children: "children",label: "name",},};},methods: {append(data){console.log(data);},remove(node, data){console.log(node, data);},// 获取分类数据getDataList() {this.dataListLoading = true;this.$http({url: this.$http.adornUrl("/product/category/list/tree"),method: "get",}).then(({ data }) => {console.log(data);this.dataListLoading = false;this.menus = data.data;});},},created() {this.getDataList(); // 获取分类数据},
};
</script>
<style scoped>
</style>

高效干活:nacos快速启动

windows上nacos的本地启动比较麻烦,每次要打开cmd,切换到对应目录,执行一个不容易记住命令,效率很低。

要解决这个问题也很简单,写一个bat脚本,配置到环境变量中,以后只要输入一个简单的命令就可以启动nacos了。

在这里插入图片描述

@echo off
setlocal enabledelayedexpansion
set NAOS_HOME=D:\sofeware\nacos-server-2.1.2\nacos
cd /d "!NAOS_HOME!\bin"
call startup.cmd -m standalone
endlocal

将这个脚本所在的目录配置到环境变量。

在这里插入图片描述

之后,只要在cmd输入下面的命令就可以启动nacos了。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus配置alertmanager告警

1、拉取镜像并运行 1、配置docker镜像源 [rootlocalhost ~]# vim /etc/docker/daemon.json {"registry-mirrors": ["https://dfaad.mirror.aliyuncs.com"] } [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl restart docker2、…

VTK源码分析:Type System

作为一款开源跨平台的数据可视化代码库&#xff0c;VTK以其清晰的流水线工作方式、丰富的后处理算法、异种渲染/交互方式&#xff0c;而被众多CAx软件选作后处理实施方案。而异种渲染/交互方式的实现&#xff0c;主要是倚重于VTK的类型系统&#xff0c;因此&#xff0c;有必要对…

从安装Node到TypeScript到VsCode的配置教程

从安装Node到TypeScript到VsCode的配置教程 1.下载Node安装包&#xff0c; 链接 2.双击安装包&#xff0c;选择安装路径&#xff0c;如下&#xff1a; 3.一直点击下一步&#xff0c;直至安装结束即可&#xff1a; 这个时候&#xff0c;node会默认配置好环境变量&#xff0c;并且…

抖音客户端一面

C | 字节抖音客户端一面 Http握手过程 1. 客户端问候(Client Hello) 客户端向服务器发送一个“问候”消息&#xff0c;其中包含客户端支持的SSL/TLS版本、加密算法、压缩方法以及一个随机数。 version 版本号,https也有版本号哦TLS 1.0、TLS 1.1、TLS 1.2等等 random 随机数…

(11)Python引领金融前沿:投资组合优化实战案例

1. 前言 本篇文章为 Python 对金融的投资组合优化的示例。投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程&#xff0c;目的是最大限度地提高回报和降低风险。 投资组合优化是从一组可用的投资组合中选择最佳投资组合的过程&#xff0c;目的是最大限度地提高回报…

JUnit 单元测试

JUnit 测试是程序员测试&#xff0c;就是白盒测试&#xff0c;可以让程序员知道被测试的软件如何 &#xff08;How&#xff09;完成功能和完成什么样&#xff08;What&#xff09;的功能。 下载junit-4.12和hamcrest-core-1.3依赖包 相关链接 junit-4.12&#xff1a;Central …

【Qt】窗口

文章目录 QMainWindow菜单栏工具栏状态栏浮动窗口对话框自定义对话框Qt内置对话框QMessageBox QMainWindow Qt中的主窗口以QMainWindow表示&#xff0c;其总体结构如下&#xff1a; 菜单栏 菜单栏MenuBar&#xff0c;可包含多个菜单Menu&#xff0c;每个菜单也可以包含多个菜…

Godot游戏制作 03世界构建1.0版

在game场景&#xff0c;删除StaticBody2D节点&#xff0c;添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块&#xff0c;自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式&#xff0c;TileMap选择绘制&#xff0c;选中图块后在…

Java——————接口(interface) <详解>

1.1 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本电脑上的USB接口&#xff0c;电源插座等。 电脑的USB口上&#xff0c;可以插&#xff1a;U盘、鼠标、键盘...所有符合USB协议的设备 电源插座插孔上&#xff0c;可以插&#xff…

若依Vue前后端分离版如何部署(windows)(超详细)

一、项目环境准备 下面是项目所需要准备的环境 Node.js redis 1、Node.js下载 下面进入官网可以下载Node.js — 在任何地方运行 JavaScript (nodejs.org)https://nodejs.org/zh-cn 下载完成安装后&#xff0c;需要配置环境变量&#xff0c;首先复制以下nodejs的安…

springboot系列十一:Thymeleaf

文章目录 官方文档基本介绍Thymeleaf机制说明Thymeleaf语法表达式运算符th属性迭代条件运算使用Thymeleaf th属性需要注意点 Thymeleaf综合案例需求说明思路分析代码实现 作业布置 官方文档 在线文档: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 离线…

css黑色二级下拉导航菜单

黑色二级下拉导航菜单https://www.bootstrapmb.com/item/14816 body { font-family: Arial, sans-serif; margin: 0; padding: 0; }nav { background-color: #000; /* 导航背景色为黑色 */ }.menu { list-style-type: none; margin: 0; padding: 0; overflow: hidden; }.menu l…

ARP欺骗——华为ensp

首先&#xff0c;搭建好网络拓扑。网络设备包含客户端Client1和服务端Server1&#xff0c;交换机 以及 云。 图中的 Client和Server 配置IP地址&#xff0c;要和 vm8 在相同的网段。故设置客户端ip为192.168.11.10 &#xff0c;服务端ip为&#xff1a;192.168.11.20&#xff0…

uni-app AppStore Connect上传拒绝汇总

1.Guideline 2.3.3 - Performance - Accurate Metadata 问题是图片不对&#xff0c;最好是自己截图&#xff0c;然后用香蕉云编 上传图片合成图片 2.Guideline 5.1.2 - Legal - Privacy - Data Use and Sharing 解决办法&#xff1a;在uniapp manifest.json找到 APP常用其他…

【Ubuntu】Ubuntu系统镜像

清华镜像源 Index of /ubuntu-releases/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /ubuntu-releases/ | 清华大学开源软件镜像站&#xff0c;致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务&#xff0c;帮助用户更方便地获取开源软…

Llama 3.1要来啦?!测试性能战胜GPT-4o

哎呀&#xff0c;Meta声称将于今晚发布的Llama 3.1&#xff0c;数小时前就在Hugging Face上泄露出来了&#xff1f;泄露的人很有可能是Meta员工&#xff1f; 还是先来看泄露出来的llama3.1吧。新的Llama 3.1模型包括8B、70B、405B三个版本。 而经过网友测试&#xff0c;该base…

Langchain核心模块与实战[8]:RAG检索增强生成[loader机制、文本切割方法、长文本信息处理技巧]

Langchain核心模块与实战[8]:RAG(Retrieval Augmented Generation,检索增强生成) RAG(Retrieval-Augmented Generation)技术是一种结合检索和生成功能的自然语言处理(NLP)技术。该技术通过从大型外部数据库中检索与输入问题相关的信息,来辅助生成模型回答问题。其核心…

gitee的怎么上传项目

前提 1.先下载Git Bash (如果没有下载的宝子们下载连接如下: 链接: link ) 项目上传到Gitee步骤 1.在Gitee上建立远程仓库 2.填写相关信息 3.进入本地你想要上传的文件目录下&#xff0c;右键单击空白处&#xff0c;点击Git Bash Here 4.配置你的用户名和邮箱 git con…

使用Ollama和OpenWebUI,轻松探索Meta Llama3–8B

大家好&#xff0c;2024年4月&#xff0c;Meta公司开源了Llama 3 AI模型&#xff0c;迅速在AI社区引起轰动。紧接着&#xff0c;Ollama工具宣布支持Llama 3&#xff0c;为本地部署大型模型提供了极大的便利。 本文将介绍如何利用Ollama工具&#xff0c;实现Llama 3–8B模型的本…

Android APP CameraX应用(02)预览流程

说明&#xff1a;camera子系统 系列文章针对Android12.0系统&#xff0c;主要针对 camerax API框架进行解读。 1 CameraX简介 1.1 CameraX 预览流程简要解读 CameraX 是 Android 上的一个 Jetpack 支持库&#xff0c;它提供了一套统一的 API 来处理相机功能&#xff0c;无论 …