springboot+vue网站开发02-前端页面的渲染代码展示

news/2024/12/22 14:08:06/

springboot+vue网站开发02-前端页面的渲染代码展示!经过上面2个小节的分享,我们已经准备好了前端渲染所需要的数据接口了。可以给大家正常返回新闻分类的信息了。


下面给大家看看,前端vue网站开发的代码,已经渲染的业务流程是什么。


如图,我们查看了package.json内容,里面告诉我们,该前端项目,调用了哪些插件。

比如大家熟悉的,路由,以及状态管理插件vuex。前端布局ui插件element-ui,前端http请求插件axios等等。


 

路由里设置的,默认调用了Home.vue插件,渲染我们的首页信息。

<!-- 首页 -->
<template><div><sg-navbar></sg-navbar><div class="container"><el-row  :gutter="30"><el-col :sm="24" :md="16" style="transition:all .5s ease-out;margin-bottom:30px;"><sg-articlelist></sg-articlelist></el-col><el-col :sm="24"  :md="8" ><sg-rightlist></sg-rightlist></el-col></el-row></div></div>
</template><script>
import header from '../components/header.vue'
import articlelist from '../components/articlelist.vue'
import rightlist from '../components/rightlist.vue'export default {name:'Home',data() { //选项 / 数据return {}},methods: { //事件处理器},components: { //定义组件'sg-navbar':header,'sg-articlelist':articlelist,'sg-rightlist':rightlist,},created() { //生命周期函数}}
</script><style></style>

 

里面写了2个组件,分别对应,导航组件,新闻列表组件,右侧热点新闻 组件。三个组件,给它起了一个别名:映射。在模板代码里就可以使用这个别名来当做标签使用了。

这个项目的代码风格是传统的风格(vue2,选项式编码风格。)


 

<el-submenu index="/Share"><template slot="title"><i class="fa fa-wa fa-archive"></i> 分类</template><el-menu-item v-for="(item,index) in classListObj" :key="'class1'+index" :index="'/Share?classId='+item.id">{{item.name}}</el-menu-item></el-submenu>

 在header头部组件内,有我们想要的导航栏信息,使用了是elementUI的标签。

elementUI对这个嵌套菜单的样式设计,渲染的时候有要求。比如:<!-- index 和key 必须要转成字符串,不然控制台会报错-->


这都是vue2选项式开发风格,不再过多的介绍了。看不懂的话,可以去看我的vue2专栏学习一下。


import request from '@/utils/request'// 查询分类列表
export function getCategoryList() {return request({url: '/category/getCategoryList',headers: {isToken: false},method: 'get'})
}

 业务请求api接口封装好了,在一个

里面,调用了axios的信息完成统一请求风格。


 

 

如图所示,后端的控制器内部路径设置,和前端请求路径信息保持一致。即可。


axios里面,关于服务器基础地址baseURL.我之前学习时犯了错,这个必须严格按照官方要求写好,大小写字母不允许自己乱改,只能是这个样子的。

import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import router from '@/router'
import store from '../store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'// 创建axios实例
const service = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: store.state.baseURL,// 超时timeout: 10000
})
// request拦截器
service.interceptors.request.use(config => {// 是否需要设置 tokenconst isToken = (config.headers || {}).isToken === falseif (getToken() && !isToken) {config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改}// get请求映射params参数if (config.method === 'get' && config.params) {let url = config.url + '?'for (const propName of Object.keys(config.params)) {const value = config.params[propName]var part = encodeURIComponent(propName) + '='if (value !== null && typeof (value) !== 'undefined') {if (typeof value === 'object') {for (const key of Object.keys(value)) {if (value[key] !== null && typeof (value[key]) !== 'undefined') {const params = propName + '[' + key + ']'const subPart = encodeURIComponent(params) + '='url += subPart + encodeURIComponent(value[key]) + '&'}}} else {url += part + encodeURIComponent(value) + '&'}}}url = url.slice(0, -1)config.params = {}config.url = url}return config
}, error => {console.log(error)Promise.reject(error)
})// 响应拦截器
service.interceptors.response.use(res => {// 未设置状态码则默认成功状态const code = res.data.code || 200// 获取错误信息const msg = errorCode[code] || res.data.msg || errorCode['default']if (code === 401) {MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {confirmButtonText: '重新登录',cancelButtonText: '取消',type: 'warning'}).then(() => {localStorage.setItem('logUrl', router.currentRoute.fullPath);router.push({path: '/Login?login=1'});}).catch(() => { })return Promise.reject('无效的会话,或者会话已过期,请重新登录。')} else if (code === 500) {Message({message: msg,type: 'error'})return Promise.reject(new Error(msg))} else if (code !== 200) {Notification.error({title: msg})return Promise.reject('error')} else {// 把字符串total 转换成 数字 totalif (res.data.data && res.data.data.total) {res.data.data.total = parseInt(res.data.data.total)}return res.data.data}
},error => {console.log('err' + error)let { message } = errorif (message === 'Network Error') {message = '后端接口连接异常'} else if (message.includes('timeout')) {message = '系统接口请求超时'} else if (message.includes('Request failed with status code')) {message = '系统接口' + message.substr(message.length - 3) + '异常'}Message({message: message,type: 'error',duration: 5 * 1000})return Promise.reject(error)}
)export default service

可以看见,把基础地址封装到了状态管理里面去了。


import Vue from 'vue'
import Vuex from 'vuex'
// import * as getters from './getters.js'Vue.use(Vuex)/** 状态定义 */
export const state = {loading: false,themeObj: 0,//主题keywords:'',//关键词errorImg: 'this.onerror=null;this.src="' + require('../../static/img/tou.jpg') + '"',baseURL:'http://localhost:7777/'
}export default new Vuex.Store({state,
})

 里面还写了一些认证的内容,不做过多的介绍了。

到此为止,我们就已经完成了前端页面请求后端接口,渲染前端页面分类导航栏信息的目的了。

 


http://www.ppmy.cn/news/1360386.html

相关文章

前后端分离项目跨域问题解决方案

一、CorsFilter 代码解读 Component这个类被标记为Spring组件&#xff0c;表示它将由Spring容器进行管理。 Order(Ordered.HIGHEST_PRECEDENCE)这个注解表明这个组件的加载顺序&#xff0c;Ordered.HIGHEST_PRECEDENCE表示最高优先级&#xff0c;将在其他过滤器之前执行。 W…

校招面试Java、springboot、mysql基本问题

这里有一些常见的Java、Spring Boot和MySQL面试问题&#xff1a; Java面试问题&#xff1a; Java中的基本数据类型有哪些&#xff1f;什么是Java中的自动装箱和拆箱&#xff1f;什么是面向对象编程&#xff1f;Java中的面向对象编程有哪些特性&#xff1f;Java中的异常处理机…

redmine旧系统迁移到docker中

redmine旧系统迁移到docker中 起因新的改变安装尝试处理插件问题自己的镜像 起因 旧系统是Linux&#xff0c;迁移redmine可谓是非常麻烦&#xff0c;安装redmine可是一个非人的折磨。 新的改变 使用docker做好一个环境&#xff0c;以后有需要的时候直接使用即可&#xff0c;…

微服务三十五关

1.微服务有什么好处&#xff1f; 微服务优点很多&#xff0c;但是我们通常说一个东西好肯定会跟另一个东西比较&#xff0c; 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处&#xff1a; 首先&#xff0c;让我们讨论单体项目的一些主要缺点&a…

【Web前端笔记11】JavaScript基础与变量

前言 11 JavaScript基础与变量 一、Js简介 1、JavaScript核心部分&#xff1a; 2、有非常广泛的使用领域 3、JavaScript与ECMAScript的关系 4、JavaScript版本 二、JavaScript名词解释 三、变量命名规则 四、变量类型 六大基本数据类型&#xff1a; 1、数字类型 2、…

汽车研发与制造中英文对照

1、技术开发概念和定义 FPDS&#xff08;Ford Product Development System&#xff09;福特产品开发系统 threetype chassis 三类底盘 inter-citybus 长途客车 PassengerVehicle 乘用车 MPV&#xff08;Multi-PurposeVehicle&#xff09;多用途汽车 SUV&#xff08;Sports Uti…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

igolang学习2,golang开发配置国内镜像

go env -w GO111MODULEon go env -w GOPROXYhttps://goproxy.cn,direct