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

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.hqwc.cn/news/487574.html

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

相关文章

C++ Primer Plus 笔记(持续更新)

编译器的正解 数据&#xff0b;算法程序 赋值从右向左进行 cin&#xff0c;cout的本质也是对象 类和对象的解释

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试,发布到CSDN

效果图 设备树代码 myplatform{compatible "hqyj,myplatform";led1-gpio<&gpioe 10 0>;led2-gpio<&gpiof 10 0>;led3-gpio<&gpioe 8 0>; interrupt-parent <&gpiof>;interrupts<9 0>;reg<0X12345678 …

Linux入门攻坚——15、进程和作业管理

一个完整的计算机系统&#xff1a;静态 最底层是硬件&#xff0c;硬件之上是操作系统&#xff0c;也叫内核&#xff08;即kernel&#xff09;&#xff0c;操作系统提供的是系统调用&#xff0c;在内核之上&#xff0c;是各种库&#xff0c;提供库函数&#xff0c;在此之上是各种…

xff注入 [CISCN2019 华东南赛区]Web111

打开题目 看见smarty 想到模板注入 又看见ip 想到xff注入 一般情况下输入{$smarty.version}就可以看到返回的smarty的版本号。该题目的Smarty版本是3.1.30 在Smarty3的官方手册里有以下描述: Smarty已经废弃{php}标签&#xff0c;强烈建议不要使用。在Smarty 3.1&#xff…

【工具】阿莫智能设备之脱机烧录器K202C-1

注意&#xff0c;本文档仅仅是介绍烧录器的资料构成&#xff0c;并非烧录器的说明书&#xff0c;详细请看各对说明书及视频。 1. 资料图解 首先需要下载资料&#xff0c;通常稳定发布版本可以从 www.amomcu.cn 下载&#xff0c; 也可以向我们客服获取最新版本&#xff0c; 获…

C++ string常见用法 + 练手习题

部分内容摘抄自http://t.csdnimg.cn/BM0jO 目录 温故&#xff1a;C库函数中和字符串有联系的函数知新&#xff1a;C string常见用法string的初始化 1.常见初始化方式string对象的操作 1.用cin获取键盘输入的值 2.用getline读取一整行 3.string对…

Leetcode2583. 二叉树中的第 K 大层和

Every day a Leetcode 题目来源&#xff1a;2583. 二叉树中的第 K 大层和 解法1&#xff1a;层序遍历 排序 先使用层序遍历计算出树的每一层的节点值的和&#xff0c;保存在数组 levelSum 中。然后将数组进行排序&#xff0c;返回第 k 大的值。需要考虑数组长度小于 k 的边…

MySql-DQL-条件查询

目录 条件查询修改数据 查询 姓名 为 Name10 的员工查询 id小于等于5 的员工信息查询 没有分配职位 的员工信息查询 有职位 的员工信息查询 密码不等于 password1 的员工信息查询 入职日期 在 2000-01-01 (包含) 到 2010-01-01(包含) 之间的员工信息查询 入职时间 在 2000-01-0…

Flink ML 的新特性解析与应用

摘要&#xff1a;本文整理自阿里巴巴算法专家赵伟波&#xff0c;在 Flink Forward Asia 2023 AI特征工程专场的分享。本篇内容主要分为以下四部分&#xff1a; Flink ML 概况在线学习的设计与应用在线推理的设计与应用特征工程算法与应用 一、Flink ML 概况 Flink ML 是 Apache…

ChatGPT在综合数据处理中的应用

ChatGPT在综合数据处理中的应用 ​ 在实际工作中&#xff0c;一个需求往往需要多个单一操作的组合才能完成。 1.1 案例1: 多条件数据匹配合并 ​ 在Excel中&#xff0c;单一条件的匹配合并比较简单&#xff0c;只需一个简单的VLOOKUP函数即可实现。而多条件匹配合并稍微有些…

如何快速导出vercel project中的环境变量

我在vercel中集成了某些插件或者链接了数据库&#xff0c;要如何快速的导出这些环境变量呢&#xff1f; 具体方法如下&#xff1a; npm i -g vercelvercel linkvercel env pull .env.local首先是安装vercel然后登录vercel 最后拉取环境变量到.env.local

C#,计算几何,计算机图形学(Computer Graphics)洪水填充算法(Flood Fill Algorithm)与源代码

1 泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法(Flood Fill Algorithm) &#xff0c;又称洪水填充算法&#xff0c;是在很多图形绘制软件中常用的填充算法&#xff0c;最熟悉不过就是 windows 自带画图软件的油漆桶功能。 2 源程序 using System; using System.Collecti…