6.5 添加Study页面
接下来添加Study页面。这个页面比较复杂。它包括左边章节导航,和右边的内容。这两部分本身又是组件。所以Study页面的模板可能是这样的:
<template>
<div id="main">
<Sidebar/>
<StudyContent/>
</div>
</template>
Study.vue的javascript部分:
import Sidebar from "@/components/Sidebar.vue";import StudyContent from '@/components/StudyContent.vue';export default{ name:"Study", components:{ StudyContent, Sidebar },}
这里使用了Sidebar组件(左侧章节菜单栏)和StudyContent组件(右侧内容),这两个组件要先建,否则Study无法测试。
为了简单起见,Sidebar部分我们只建立一个空的文件,如下所示:
<template> <div> </div></template><script> export default{name:"Sidebar",};</script>
然后我们可以先写好路由:
1.添加study到src/router/index.js的路由,一定注意导入Stduy组件,否则编译无错误,运行不出来
2.修改header的学习链接
然后是StudyContent,创建StudyContent.vue文件。
html模板部分:
<template> <div id="content" class="col-sm-9 col-xs-12"> <div id="content_aside"> <div id="box1"> <block v-if="chapter"> <h2 id="chapterTitle">{{chapter.name}}</h2> <div id="chapterContent"> <div v-html="chapter.content"> </div> </div> </block> </div> <div id="box2"> <h3 id="childNodesOrQuizesTitle"></h3> <ul id="childNodesOrQuizes" class="imageList"> <li class="last" v-if="course"><span class="chapterIntro" v-html="course"></span> </li> </ul> </div> <br class="clear"/> </div> </div></template>
2.JavaScript部分
import axios from "axios";export default{ name:"StudyContent", data(){ return{ chapter:"", course:"", } ; }, created:function(){ console.log("studyContent created"); this.getChapterContent(); }, methods:{ getChapterContent:function(){ let url="https://www.codessp.cn/wxCodessp.jsp?type=content&code=010100&courseId=1"; axios({ headers:{ "Content-Type":"application/x-www-form-urlencoded", }, method:"get", url:url, }) .then((response)=>{ if(response.status=="200"){ let t=response.data; this.chapters=t; } }); }, },};
axios是一个发起http请求的插件,只需要提供好url和参数,就可以向后台请求数据,这类http请求的返回和普通网页的http请求不同,是JSON格式,所谓JSON格式,就是类似vue里面data的格式形式:
{名称:值,名称2:值……}
普通http请求得到的html代码,然后浏览器解析。
我们可以在浏览器请求这个url,我们可以看到返回的数据。
这部分编译的时候,如果无法找到axios。需要通过命令行安装:
npm install --save axios
这部分代码,还有一个created方法,这是vue内置的钩子函数,created会在页面html准备好后执行,所以这里执行getChapterContent,就发起请求,获得章节的内容,第30行代码赋值给了组件的变量chapter,而html模板用了chapter变量显示章节的标题、内容。