6.3 中间内容部分组件Main.vue
菜单和底部信息这两个组件,在App.vue里使用了,因为这两部分被所有页面共享,但接下来的这个主页,就不能放入App.vue(除非就一个页面)。
虽然我们现在只有一个页面,但要为了将来两个或者多个页面准备。
现在我们来介绍一下路由。路由相当于页面跳转,不同的是,它是组件间的跳转。
它分两个部分:
1.配置路由
首先需要把组件和url的模式绑定起来,这部分在src/router下的index.js定义
我们只需要关注这部分代码。其中path就是url模式,name是这个模式的名字,component是这个url模式对应的是哪个组件。用上面的代码举例:
这是主页http://localhost:8080/,它对应了Home这个组件
那么http://localhost:8080/#/login就对应了Login这个组件
这部分的配置和jsp的servlet配置非常类似。
2.路由后填充的位置
访问http://localhost:8080/#/login这样的url后,并不是页面全部都替换成Login组件的内容,主页仍然是以index.html为模板,然后主要组件仍然是App.vue。那这个“被点击”到的组件该怎么显示?显示到哪里呢?
答案是router-view标签,被点击后的组件,就会填满router-view所在的位置,所以这个时候app.vue应该是这么写:
如第三行代码所示。这种模式是假设所有网页的头部菜单和底部信息都是一样的。这样点击了哪个模式,就找到对应的组件,然后取代App.vue中间的router-view标签。
接下来,我们就要新增一个组件作为中间内容,然后为这个组件添加一个路由入口。下面是新增组件Main的三部分完整代码:
<template> <div id="main" class="container"> <div id="content" class="col-sm-offset-2 col-sm-8"> <div class="row"> <div id="box1"> <div class="nickname visible-xs col-xs-12" style="font-size: 10px; text-align: right"> 你好,游客。 <a href="login.jsp">请登录,</a> </div> <img class="col-xs-6 col-xs-offset-3 col-sm-5 col-sm-offset-0" src="images/java.jpg" alt=""/> <p v-if="mainInfo" class="col-xs-12 col-sm-7"> <span class="info">你正在学习<span class="bg-info">{{mainInfo.courseName}}</span> </span> <span class="info">你上次学习到<a id="studyLink" href="study.jsp?c=11#060100">{{mainInfo.chapterName}}</a> </span> <span class="info">已完成{{mainInfo.percent*100}}%<progress max="1" v-bind:value="mainInfo.percent"></progress> </span> </p> <p v-else class="col-xs-12 col-sm-7"> <br/> 你正在学习 <span class="bg-info">Java程序设计</span> <br/> <span>循序渐进,在线练习,自动批改,适合零基础的学习者</span> 你还没任何学习记录哦, <a id="studyLink" href="study.jsp">点击这里</a> ,开始你的Java之旅吧! </p> </div> </div> <div class="row"> <div class="col-md-5 hidden-xs"> <ul class="imageList"> <li class="first"><span>坚持每天学习一点</span> <br/> <span>扫码使用小程序,手机也可以学习java哦</span> <img class="wxQr" src="https://www.codessp.cn/images/codesspwx.jpg"/> </li> </ul> </div> <div class="errorInfo col-md-7"> <ul> </ul> </div> </div> </div> <input type="hidden" value="" id="username"/> <br class="clear"/> </div></template>
2.JavaScript部分:
export default{
name:"Main",
data(){
return{
mainInfo:{
courseName:"java程序设计",
chapterName:"8.1 类的基础",
percent:0.85,
},
}
;
},
}
3.css部分
#box1 { overflow: hidden; margin: 0 0 35px 0; border-bottom: 1px dotted; padding-bottom: 20px;}#box2 { overflow: hidden; float: left;}#box3 { width: 300px; overflow: hidden; margin: 0 0 0 420px; outline: 1px solid #ccc; float: left;}#content { padding: 20px 40px 0px 40px; background: #fff; position: relative; border-radius: 10px; box-shadow: 0 2px 8px #ccc; border-left: 5px solid #ccc; border-right: 5px solid #ccc;}#content #studyLink { font-weight: bold; color: #ad8667;}#main { position: relative; /* min-width: 1001px; */ color: #5e5e5e;}#main strong { color: #3e3e3e;}#main a { color: #242424;}#main h2,#main h3,#main h4 { color: #242424;}#main ul { list-style: none;}#main ul li { border-top: dotted 1px #b3b3b3; padding-bottom: 20px;}#main ul li.first { padding-top: 0; border-top: 0; font-weight: bold;}#main ul li.first .info { padding-left: 0px; border-top: 0; font-size: 12px; font-weight: normal; line-height: 14px; color: red;}.wxQr{ display: block; width: 129px; margin-left: auto; margin-right: auto;}#main ul.imageList li { padding: 15px 0 15px 0;}p span.info { display: block; padding: 2px;}
最后,修改Header.vue组件关于主页的链接,从"/"改成"/Main"