多级菜单如何使用并且显示在前端(还有跨域怎么解决)

前言

昨天我们编写了一个后端的接口返回了一个树形结构的数据,今天我们讲一下前端是如何接收到这些数据,并且使用的

准备工作

介绍: 我们后端是使用gie上面的人人开源项目的脚手架工程,为什么使用脚手架工程呢,因为这可以大大提高我们的工作效率,并且可以借鉴别人的代码,丰富自己的知识面。

使用: 链接地址 https://gitee.com/renrenio/
在这里插入图片描述
前端

1 我们下好前端项目需要导入我们的前端编写工具 这里使用的 Visual Studio Code

2 导入以后需要初始化项目

3 初始化以后直接npm run dev

在这里插入图片描述
4.默认的账号密码都是admin

5.需要安装node.js 才能使用npm

6.初始化命令为npm install 需要下载我们的依赖

后端

1.直接下载以后导入我们的idea即可

2.配置我们这个项目需要的数据库

开始操作

在我们首页的系统管理里面点击我们的菜单管理,为我们的页面添加一个新的路由
在这里插入图片描述
在这里插入图片描述
现在我们的商品系统里面是没有任何东西的,我们需要在菜单管理为我们的商品系统新增菜单
在这里插入图片描述
我们添加成功刷新页面,发现已经有了页面了
在这里插入图片描述
vs code操作

1 我们的页面的路由编写完成以后,需要去编写我们的前端页面去请求我们的后端接口把我们的数据展示在这个页面中

2 在我们的前端的modules目录下新建文件夹product

3 在我们的product中编写我们的vue页面取名为 category

4 为什么要这样 以后人人开源这个项目为我们制定了一些规则 这样这个页面就会去找product下的category.vue为我们展示在页面中

5 我们开始编写我们的vue代码,我们代码使用Element ui里面的tree组件

<template>
 <div>
     <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick"></el-tree>
 </div>
</template>

6 编写我们的方法返回我们的数据,就简简单单发送一个请求把我们所有的数据返回并且打印出来
在这里插入图片描述
7.查看我们的前端展示页面发现想要的并没有展示出来,这是为什么呢
在这里插入图片描述

我们发现我们请求的端口是8080的renren-fast下的这个请求而不是我们后端编写的http://localhost:10000/product/category/list/tree 这个请求

8 怎么解决我们的端口问题,这时候就可以使用到我们的gateway了,使用gateway管理,把我们的路径全部在gateway中配置,这样我们不同的端口的数据都可以通过gateway进行管理,我们前端的请求地址只需要写成我们的网关端口即可
在这里插入图片描述
需要在我们需要的模块中注册到我们的nacos中
需要依赖

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-loadbalancer</artifactId>
			<version>2.2.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
			<version>2.2.0.RELEASE</version>
		</dependency>
		<!--        配置中心来做配置管理-->
		<dependency>
			<groupId>com.alibaba.cloud</groupId>
			<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
			<version>2.2.0.RELEASE</version>
		</dependency>

9.因为我们使用renren-fast的后端页面和前端页面,我们修改了网关,我们也需要把我们的renren-fast配置到配置中心中
在这里插入图片描述
还要在我们的gateway配置文件中进行配置
在这里插入图片描述

跨域怎么解决

前面我们把前端显示出来了

但是我们发送请求登录的时候,却出现了403错误

在这里插入图片描述
我们需要在我们的gateway中配置一下我们的跨域的配置

package com.atguigu.gulimall.gateway.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * <p>
 * 处理跨域
 * </p>
 *
 * @author qy
 * @since 2019-11-21
 */

/**
 * description:
 *
 * @author wangpeng
 * @date 2019/01/02
 */
@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource();
        // 跨域配置信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        // 允许跨域的头
        corsConfiguration.addAllowedHeader("*");
        // 允许跨域的请求方式
        corsConfiguration.addAllowedMethod("*");
        // 允许跨域的请求来源
        corsConfiguration.addAllowedOrigin("*");
        // 是否允许携带cookie跨域
        corsConfiguration.setAllowCredentials(true);

        // 任意url都要进行跨域配置
        source.registerCorsConfiguration("/**",corsConfiguration);
        return new CorsWebFilter(source);
    }
}


第二种解决方法

就是在我们的controller上面加上注解@CrossOrigin

模块多和微服务项目不建议这么做

后端数据显示到前端

1 由于我们前端和后端存在我们的跨域的问题,我们后端提供数据的模块也需要注册nacos并且在gateway中编写配置
在这里插入图片描述
在这里插入图片描述
2.我们访问一下我们的88端口管理的这个URL地址查看数据是否得到
解释一下这里为什么url地址有一个api,因为我们在vs code的前端配置文件中设置了一个接口访问的地址在这里插入图片描述

在这里插入图片描述

3.我们看一下我们前端请求这个地址是如何返回的
在这里插入图片描述
4.接下来就可以在前端页面中取出里面的值,进行展示了
我们前端页面进行了解构,只取我们的data里面的数据
在这里插入图片描述
在这里插入图片描述
5.只需要在我们的页面的方法中取到对应的值即可
在这里插入图片描述
把我们查询到内容赋值给这个menus
在这里插入图片描述

在这里插入图片描述
defaultProps中的chidren和label可以参照element-ui官网文档
在这里插入图片描述
看看我们的页面把
在这里插入图片描述
不会联系的本人QQ:495470602

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端解决跨域问题,有以下几种常见的方法: 1. CORS(跨域资源共享):在服务器端配置允许跨域请求的响应头。具体的配置方法根据你使用的后端框架或语言而有所不同。一般来说,你需要在响应中添加 `Access-Control-Allow-Origin` 头,并设置为允许访问的域名,或者设置为 `*` 表示允许所有域名访问。你还可以设置其他 CORS 相关的头信息,如 `Access-Control-Allow-Methods`、`Access-Control-Allow-Headers` 等。 2. JSONP:如果你只需要进行 GET 请求,你可以使用 JSONP 来解决跨域问题。JSONP 是通过动态创建 `<script>` 标签来进行跨域请求的。你可以在前端代码中定义一个回调函数,然后将回调函数的名称作为参数传递给目标地址,目标地址在返回数据时会将数据包装在回调函数中返回。 3. 反向代理:使用反向代理服务器来代理前端请求。你可以在同一域名下设置一个代理服务器,将前端请求转发到目标地址,并将响应返回给前端。这种方法需要在服务器端进行配置,常见的反向代理服务器有 Nginx、Apache 等。 4. WebSocket:WebSocket 是一种全双工通信协议,它可以在客户端和服务器之间建立持久连接。由于 WebSocket 不受同源策略的限制,因此可以用于解决跨域问题。你可以在前端使用 WebSocket 与目标地址进行通信。 你可以根据具体的场景和需求选择适合的跨域解决方案。但请注意,在使用 JSONP 或反向代理时,要确保目标地址的服务器已经进行了适当的安全措施,以防止潜在的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值