Vue + Spring Boot 项目实战(八):导航栏与图书页面设计

在这里插入图片描述

文章目录

  • 前言
  • 一、导航栏的实现
    • 1.路由配置
    • 2.使用 NavMenu 组件
  • 二、图书管理页面
    • 2.1. LibraryIndex.vue
    • 2.SideMenu.vue
    • 3.Books.vue

前言

之前讲过使用 Element 辅助前端页面的开发,但是只用到了比较少的内容,这一篇我们来做一下系统的核心页面——图书管理页面的前端部分,旨在熟悉 Vue 的更多特性。

一、导航栏的实现

我们的项目虽然本质上是单页面应用,但表面上有多个功能页面,比如首页、图书馆、笔记本等,后期根据情况还可以把一些功能集中起来做一个后台管理页面。为了方便用户在这三个页面之间切换,我们需要添加一个导航栏。

这个导航栏的要求很简单:

  • 能够在每个页面显示
  • 美观

1.路由配置

为了实现第一个要求,我们需要把导航栏放在其它页面的父页面中(对 Vue 来说就是父组件),之前我们讲过,App.vue 是所有组件的父组件,但把导航栏放进去不合适,因为我们的登录页面中不应该显示导航栏。

为了解决这个问题,我们在 src/components 目录下直接新建一个组件,命名为 Home.vue,原始代码如下:

<template><div><router-view/></div>
</template><script>
export default {name: "Home"
}
</script><style scoped></style>

这里和 App.vue 一样,写入了一个 <router-view/>,也就是子页面(组件)显示的地方。

接下来,来建立路由的父子关系。注意我们在一个组件中通过导入引用了其它组件,也可以称之为父子组件,但想要通过 控制子组件的显示,则需要进行路由的相关配置。

打开 router/index.js ,修改代码如下

import Vue from 'vue'
import Router from 'vue-router'
// 导入编写的组件
import AppIndex from '@/components/home/AppIndex'
import Login from '@/components/Login'
import Home from '@/components/Home'Vue.use(Router)export default new Router({mode: 'history',routes: [// 下面是固定写法{path: '/home',name: 'Home',component: Home,// home页面并不需要被访问到redirect: '/index',children: [{path: '/index',name: 'AppIndex',component: AppIndex,meta: {requireAuth: true}}]},// 下面是固定写法{path: '/login',name: 'Login',component: Login}]
})

注意我们并没有把首页的访问路径设置为 /home/index,仍然可以通过 /index 访问首页,这样配置其实是感受不到 /home 这个路径的存在的。之后再添加新的页面,可以直接在 children 中增添对应的内容。

2.使用 NavMenu 组件

打开 Element 的文档,找到 NavMenu 组件相关内容:

https://element.eleme.cn/2.0/#/zh-CN/component/menu

主要有顶栏、侧栏两种导航样式,我们选择顶栏型,点击显示代码
在这里插入图片描述
这个顶栏其实有两个,上面的是没有底色的,下面的是有底色的。
在这里插入图片描述
在这里插入图片描述
这些代码基本涵盖了各种用法,我们可以选择自己需要的部分,并根据下面的文档对它进行改造。

我们在 components 文件夹里新建一个 common 文件夹,用来存储公共的组件,并在该文件夹新建一个组件 NavMenu.vue,经过我修改的代码如下:

<template><el-menu:default-active="'/index'"routermode="horizontal"background-color="white"text-color="#222"active-text-color="red"style="min-width: 1300px"><el-menu-item v-for="(item,i) in navList" :key="i" :index="item.name">{{ item.navItem }}</el-menu-item><a href="#nowhere" style="color: #222;float: right;padding: 20px;">更多功能</a><i class="el-icon-menu" style="float:right;font-size: 45px;color: #222;padding-top: 8px"></i><span style="position: absolute;padding-top: 20px;right: 43%;font-size: 20px;font-weight: bold">White Jotter - Your Mind Palace</span></el-menu>
</template><script>export default {name: 'NavMenu',data () {return {navList: [{name: '/index', navItem: '首页'},{name: '/jotter', navItem: '笔记本'},{name: '/library', navItem: '图书馆'},{name: '/admin', navItem: '个人中心'}]}}}
</script><style scoped>a{text-decoration: none;}span {pointer-events: none;}
</style>

这里需要解释两点。

第一,在 <el-menu> 标签中我们开启了 router 模式,在 Element 文档中的解释如下:
在这里插入图片描述
第二,我们通过 v-for 指令,把 navList 数组渲染为一组 <el-menu-item> 元素,也即导航栏的内容。当然我们也可以分开写,这种用法只是显得 six 一些(当需要动态更改列表内容时就很有用了)

另外为了美观我还加了点别的东西,都很基础,就不多说了。

接下来,我们需要把这个组件放在 Home.vue 中。

修改 Home.vue 的代码如下:

<template><div><router-view/></div>
</template><script>
import NavMenu from './common/NavMenu'
export default {name: 'Home',components: {NavMenu}
}
</script><style scoped></style>

启动前后端项目,测试一下:

npm run dev

在这里插入图片描述
在这里插入图片描述
这样,我们访问 http://localhost:8080/index ,就会在顶部出现导航栏。这时我们还没有别的页面可以访问,所以点击按钮就跳到了空白的页面。
在这里插入图片描述

在这里插入图片描述
嗯,首页也啥也没有。这个页面我不打算多说什么,大家可以把它作为一个纯粹的展示页面,练习一下 html、css 之类。我做的首页源码可以在 GitHub 上下载下来参考使用,大致是这样的。
在这里插入图片描述

二、图书管理页面

这是我们的核心页面,我们先把它设计出来,以后再去实现具体的功能。

我拍脑袋想了一下,页面大概需要以下内容:

  • 1、图书展示区域
  • 2、分类导航栏
  • 3、搜索栏
  • 4、页码

2.1. LibraryIndex.vue

src/components 中新建文件夹 library,新建组件 LibraryIndex.vue,作为图书页面的根组件,代码如下

<template><el-container><el-aside style="width: 200px;margin-top: 20px"><switch></switch><!--<SideMenu></SideMenu>--></el-aside><el-main><!--<books></books>--></el-main></el-container>
</template><script>export default {name: 'AppLibrary'
}
</script><style scoped></style>

注释掉的部分是接下来需要编写的组件。这里我们使用了 Element 提供的 Container 布局容器,把整个页面分为了侧边栏和主要区域两个部分,详细了解请参考

https://element.eleme.cn/2.0/#/zh-CN/component/container
在这里插入图片描述
接下来我们配置这个页面的路由,修改 router/index.js 代码如下:

import Vue from 'vue'
import Router from 'vue-router'
// 导入编写的组件
import AppIndex from '@/components/home/AppIndex'
import Login from '@/components/Login'
import Home from '@/components/Home'
import LibraryIndex from '../components/library/LibraryIndex'Vue.use(Router)export default new Router({mode: 'history',routes: [// 下面是固定写法{path: '/home',name: 'Home',component: Home,// home页面并不需要被访问到redirect: '/index',children: [{path: '/index',name: 'AppIndex',component: AppIndex,meta: {requireAuth: true}},{path: '/library',name: 'Library',component: LibraryIndex,meta: {requireAuth: true}}]},// 下面是固定写法{path: '/login',name: 'Login',component: Login}]
})

P.S 关于 router 的配置已经写了许多次了,接下来为了节省篇幅,我就只贴出来主要修改的部分啦

访问 http://localhost:8080/library ,发现可以访问了,当然,页面还是空白的,但是出现了导航栏,可以测试一下在首页和图书馆页面之间切换。
在这里插入图片描述

2.SideMenu.vue

编写一个侧边栏组件。放在 src/components/library 文件夹中,代码如下

<template><el-menuclass="categories"default-active="0"@select="handleSelect"active-text-color="red"><el-menu-item index="0"><i class="el-icon-menu"></i><span slot="title">全部</span></el-menu-item><el-menu-item index="1"><i class="el-icon-menu"></i><span slot="title">文学</span></el-menu-item><el-menu-item index="2"><i class="el-icon-menu"></i><span slot="title">流行</span></el-menu-item><el-menu-item index="3"><i class="el-icon-menu"></i><span slot="title">文化</span></el-menu-item><el-menu-item index="4"><i class="el-icon-menu"></i><span slot="title">生活</span></el-menu-item><el-menu-item index="5"><i class="el-icon-menu"></i><span slot="title">经管</span></el-menu-item><el-menu-item index="6"><i class="el-icon-menu"></i><span slot="title">科技</span></el-menu-item></el-menu>
</template><script>
export default {name: 'SideMenu'
}
</script><style scoped>.categories {position: fixed;margin-left: 50%;left: -600px;top: 100px;width: 150px;}
</style>

LibraryIndex.vue 中使用这个组件

<template><el-container><el-aside style="width: 200px;margin-top: 20px"><switch></switch><SideMenu></SideMenu></el-aside><el-main><!--<books></books>--></el-main></el-container>
</template><script>
import SideMenu from './SideMenu'
export default {name: 'AppLibrary',components: {SideMenu}
}
</script><style scoped></style>

访问 http://localhost:8080/library 查看效果
在这里插入图片描述

3.Books.vue

最后,我们用一个组件来显示图书。这个组件比较复杂,初始代码如下

<template><div><el-row style="height: 840px;"><!--<search-bar></search-bar>--><el-tooltip effect="dark" placement="right"v-for="item in books":key="item.id"><p slot="content" style="font-size: 14px;margin-bottom: 6px;">{{item.title}}</p><p slot="content" style="font-size: 13px;margin-bottom: 6px"><span>{{item.author}}</span> /<span>{{item.date}}</span> /<span>{{item.press}}</span></p><p slot="content" style="width: 300px" class="abstract">{{item.abs}}</p><el-card style="width: 135px;margin-bottom: 20px;height: 233px;float: left;margin-right: 15px" class="book"bodyStyle="padding:10px" shadow="hover"><div class="cover"><img :src="item.cover" alt="封面"></div><div class="info"><div class="title"><a href="">{{item.title}}</a></div></div><div class="author">{{item.author}}</div></el-card></el-tooltip></el-row><el-row><el-pagination:current-page="1":page-size="10":total="20"></el-pagination></el-row></div>
</template><script>
export default {name: 'Books',data () {return {books: [{cover: 'https://i.loli.net/2019/04/10/5cada7e73d601.jpg',title: '三体',author: '刘慈欣',date: '2019-05-05',press: '重庆出版社',abs: '文化大革命如火如荼进行的同时。军方探寻外星文明的绝秘计划“红岸工程”取得了突破性进展。但在按下发射键的那一刻,历经劫难的叶文洁没有意识到,她彻底改变了人类的命运。地球文明向宇宙发出的第一声啼鸣,以太阳为中心,以光速向宇宙深处飞驰……'}]}}
}
</script><style scoped>.cover {width: 115px;height: 172px;margin-bottom: 7px;overflow: hidden;cursor: pointer;}img {width: 115px;height: 172px;/*margin: 0 auto;*/}.title {font-size: 14px;text-align: left;}.author {color: #333;width: 102px;font-size: 13px;margin-bottom: 6px;text-align: left;}.abstract {display: block;line-height: 17px;}a {text-decoration: none;}a:link, a:visited, a:focus {color: #3377aa;}
</style>

之后我们要实现的许多功能都与这个组件有关。目前用到的这部分,需要注意的有:

  • 1、v-for 指令,之后可以使用动态渲染,这里我们用《三体》的内容作为一个默认值,先查看效果。
  • 2、el-tooltip Element 提供的组件,用于展示鼠标悬停时的提示信息。参考 https://element.eleme.cn/2.0/#/zh-CN/component/tooltip
    在这里插入图片描述
  • 3、slot 插槽,及把标签中的内容插到父组件指定的地方,这里我们插入了 el-tooltip 的 content 中。上述文档中亦有描述。
  • 4、封面图像标签中,我们使用了 :src="item.cover" 这种写法,: 其实是 v-bind: 的缩写,用于绑定把标签的属性与 data 中的值绑定起来。
  • 5、搜索栏暂不理会
  • 6、分页使用 el-pagination 组件,目前只是样式。
    图书卡片的样式是模仿豆瓣读书做的。
    在这里插入图片描述
    最后把 Books 组件放在 LibraryIndex.vue 中,并稍微修改一下样式
<template><el-container><el-aside style="width: 200px;margin-top: 20px"><switch></switch><SideMenu></SideMenu></el-aside><el-main><books class="books-area"></books></el-main></el-container>
</template><script>
import SideMenu from './SideMenu'
import Books from './Books'
export default {name: 'AppLibrary',components: {SideMenu, Books}
}
</script><style scoped>.books-area {width: 990px;margin-left: auto;margin-right: auto;}</style>

P.S 以后添加组件之类的代码我也尽量只放关键部分,大家要多尝试自己调试。

最后,访问 http://localhost:8080/library ,效果如下
在这里插入图片描述
功能完善之后是这个样子的
在这里插入图片描述
项目的源码在我的 GitHub 上,可以下载下来参考:

https://github.com/Antabot/White-Jotter

感谢大家的支持!如果有想不清楚的问题,请给我发个邮件,我一定及时回复!

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

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

相关文章

pmsm simulink foc 仿真_仿真软件教程

很多朋友都建议我做个视频的整理&#xff0c;方便没看过之前内容的朋友方便查找&#xff0c;我觉得这个确实很有必要。下面内容是关于仿真软件方面&#xff1a;仿真环境&#xff1a;Simlpis 8.0类型简介VMC和CMC的LLC控制器仿真对比 第一节图文电压模式和电流模式LLC控制器的简…

日志采集中的关键技术分析

摘要&#xff1a; 从日志投递的方式来看&#xff0c;日志采集又可以分为推模式和拉模式&#xff0c;本文主要分析的是推模式的日志采集。概述日志从最初面向人类演变到现在的面向机器发生了巨大的变化。最初的日志主要的消费者是软件工程师&#xff0c;他们通过读取日志来排查问…

限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!

2019 年12月5-7 日&#xff0c;由中国计算机学会主办&#xff0c;CCF 大数据专家委员会承办&#xff0c;CSDN、中科天玑数据科技股份有限公司协办的 2019 中国大数据技术大会&#xff0c;将于北京长城饭店隆重举行。届时&#xff0c;超过百位技术专家及行业领袖将齐聚于此&…

机器学习和数据科学领域必读的10本免费书籍

摘要&#xff1a; 暑期来了&#xff0c;别出去溜达了&#xff0c;看书学习一波&#xff5e;在这个暑假&#xff0c;有兴趣的可以阅读一下这些免费的有关机器学习和数据科学的书籍&#xff0c;他们能给你打开一扇看清机器学习和数据科学的窗。如果在阅读完这一文章后想知晓更多免…

microsoft账号登陆一直在加载_英雄联盟手游下载,附带拳头账号注册教程

欢迎关注【花卷来了】公众号。如果喜欢本期节目请点赞、再看、分享给朋友吧~软件资源请回复文章底部今日关键词获取/排版&#xff1a;萌萌哒花卷/来源&#xff1a;采集自网络今日主题&#xff1a;最新英雄联盟手游下载&#xff0c;附带拳头账号注册教程英雄联盟手游今天正式公测…

机器学习者都应该知道的五种损失函数!

摘要&#xff1a; 还不知道这五种损失函数&#xff1f;你怎么在机器学习这个圈子里面混&#xff1f;在机器学习中&#xff0c;所有的机器学习算法都或多或少的依赖于对目标函数最大化或者最小化的过程&#xff0c;我们常常把最小化的函数称为损失函数&#xff0c;它主要用于衡量…

linux服务器监控zabbix,Linux监控之--使用ZABBIX监控web服务器

使用ZABBIX监控web服务器实验拓扑图&#xff1a;实验思路&#xff1a;nginx添加状态统计模块&#xff0c;编写nginx对应的状态统计脚本。zabbix-server导入nginx模板&#xff0c;并对主机实现监控。实验环境角色IP地址操作系统版本软件包Zabbix_server192.168.0.158/24Centos6.…

Facebook 约十亿美元收购脑机技术公司,助攻AR研发;苹果宣布新款 Mac Pro 在美国生产;谷歌称已实现量子霸权…...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 小米MIX Alpha手机官方概念图…

知道这些用于数据科学和机器学习的GitHub存储库和Reddit主题吗?

摘要&#xff1a; 5月最热门的GitHub存储库和顶级Reddit讨论&#xff0c;戳进来~GitHub和Reddit都是比较有趣的平台&#xff0c;在这里&#xff0c;我不仅学习了数据科学的一些最佳应用&#xff0c;而且还了解数据科学家们是如何编程的。一直以来&#xff0c;GitHub都是开发人员…

l2-008 最长对称子串 (25分)_小学数学关于时间认识(时、分、秒)的几点总结

本文将通过对照学习一个个知识点&#xff0c;延伸出各种知识点的常用题型。一、时、分、秒之间的换算&#xff1a;1时60分 1分60秒这类题型考的是时间单位之间的换算&#xff0c;一种是大单位换小单位&#xff0c;一种是小单位换大单位。在之前的一篇文章里有关于换算的计算方法…

如何在阿里云上构建一个合适的Kubernetes集群

摘要&#xff1a; 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践&#xff0c;只是作为参考&#xff0c;大家可以根据实际情况做出调整。 集群规划 在实际案例中发现&#xff0c;有不少同学使用了很多的小规格的ECS来构建K8S集群&#xff0c;这样其实即没有达到省钱的目…

360断网急救箱_万事不求人,教你自己动手修复网络断网

日常使用中&#xff0c;我们经常会遇到原来好好的网络忽然无法上网的问题。在排除宽带没有问题&#xff0c;硬件交换机、路由器、网线没有问题的情况下&#xff0c;我们可以充分利用第三方工具的修复功能。前几天&#xff0c;我就遇到一例电脑不能上网的问题&#xff0c;同一办…

linux 网络dma驱动,S3C2410的Linux下DMA驱动程序开发

网上介绍Linux下的一般驱动程序开发示例浩如烟海&#xff0c;或是因为简单&#xff0c;关于DMA驱动的介绍却寥寥无几&#xff1b;近期因工作需要&#xff0c;花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序&#xff0c;有感于刚接手时无资料借鉴的茫然&…

Pivotal冯雷:以数字化为核心竞争力的时代 自主可控是企业的“必然选择”

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着互联网的飞速发展&#xff0c;特别是近年来随着社交网络、物联网、云计算以及多种传感器的广泛应用&#xff0c;以数量庞大&#xff0c;种类众多&#xff0c;时效性强为特征的非结构化数据不断涌现&#xff0c;数据的重要性愈发…

druid去掉广告

定位问题 产生广告的JS文件在 druid-1.1.19.jar/support/http/resources/js/common.js。 查看源码可知是buildFooter方法进行植入&#xff0c;由init方法调用。 解决方案&#xff1a; 找到对应的依赖jar包&#xff0c;如druid-1.1.19.jar 找到support/http/resource/js/comm…

阿里巴巴的AI算法程序媛是怎样的一种存在?

摘要&#xff1a; 一个专注人脸识别技术长达11年的程序媛。程序媛、AI、算法、人脸识别、阿里安全图灵实验室……这些标签任何一个都极具话题性&#xff0c;但如果一个女子同时拥有这些标签&#xff0c;那会是怎样的存在&#xff1f;在见到于鲲之前&#xff0c;我的脑子里是各种…

Hadoop 中zoo_数据分析中的Excel、R、Python、SPSS、SAS和SQL

作为一直想入门数据分析的童鞋们来说&#xff0c;如何选定一门面向数据分析的编程语言或工具呢&#xff1f;注意是数据分析&#xff0c;而不是大数据哦&#xff0c;数据分析是基础了。数据分析的工具千万种&#xff0c;综合起来万变不离其宗。无非是数据获取、数据存储、数据管…

linux下装sqlserver安装包,【sqlServer】CentOS7.x 上Microsoft SQL Server for Linux安装和配置...

SQL Server Documentationhttps://docs.microsoft.com/en-us/sql/sql-server/sql-server-technical-documentation?viewsql-server-2017Installation guidance for SQL Server on Linuxhttps://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup?viewsql-server-20…

2019云栖大会:逍遥看巅峰,张勇提“百新”,平头哥“再亮剑”

文 | 阿晶、丹丹、王银发于阿里云栖大会现场 出品 | CSDN云计算&#xff08;ID&#xff1a;CSDNcloud&#xff09; “今天不是马云的退休&#xff0c;而是制度传承的开始。”9月10日&#xff0c;阿里20周年的大日子&#xff0c;逍遥子接棒风清扬&#xff0c;跟唱《追梦赤子心》…

10行代码让你轻松搞定对象检测

摘要&#xff1a; 十行代码轻松搞定对象检测&#xff1f;快来看看如何使用ImageAI。计算机视觉是人工智能领域中最重要的一个分支。计算机视觉是一门能够识别和理解图像及其场景的计算机软件系统的科学。计算机视觉包括图像识别、对象检测、图像生成、图像超分辨率等多个方面。…