课程管理-课程大纲列表(前端) | 学习笔记

简介: 快速学习课程管理-课程大纲列表(前端)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot)课程管理-课程大纲列表(前端)学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/667/detail/11377


课程管理-课程大纲列表(前端)


内容介绍

一、手动构建数据

二、添加数据后的测试结果

三、前端实现思路

四、api部分

五、页面部分


一、手动构建数据

先手动构建一些数据,因为还没有学习到添加,等到做完添加之后再

进行完整测试。

1.构建 edu_course 课程表数据

此时 edu_course 中有一个 id 为18的课程用作测试。

2.构建 edu_course 章节表数据

除了课程之外同时 edu_chapter 章节表中因为有课程 id,所以有多

个数据,保留两个将有效果的留下两个 course_id 为18的。

为了测试方便将两个 course_id为18的id一个改为11一个改为12。

最后将其 refresh 刷新,更改完成之后,再构建章节中的小节。

3.构建 edu_video 小节表数据

将 course_id 对应为18的两个 chapter 改为11和12。同时再更改

一个新的18的课程,id 为21,chapter-id 为11.

(更改前)

(更改后)

点击r efresh 更新,显示更改后的结果。

接下来查询课程id为18的课程,在18课程中,刚才构建出了有两

个章节,同时在小节中还有对应的章节,这就是我们需要获得的数据。


二、添加数据后的测试结果

构建之后启动服务器,查看最终的结果如何,即查看封装过程,当然

在 Controller 上面要加上跨域注解,之后进行添加。

启动成功后,打开新标签页,输入网址:http://localhost8001/sw

agger-ui.html 使用 swagger 测试。打开第一个edu-chapter-contr

oller,点击刚才写的,得到章节小节的列表。

在测试位置,输入刚才手动构建的条件课程id:18,点击 Tryito

ut!再下方的 ResponseBody中查看结果。在结果中 allchaptervid

eo表示名字,其中为数组形式。

同时其中有两个对象。在第一个对象中章节就是第七章这个值,在 c

hildren 中有两个小节。此时显示出的数据与之前的一二级分类一致,

每个章节中有对应的小节,章节中用 children 代表其中的小节,每

个小节中可以有一个或多个,甚至是没有。到此关于数据的封装接口

部分就全部完成,根据两个操作,同学自行熟悉过程,包括课程分类

列表和课程大纲列表都是这种封装思想。

ResponseBody 代码如下:

{

"success"":true,

"code":22000,

"message"":“成功”,

"data":{

//表示名字

"allchaptervideo":[//其中为一个数组形式

//第一个对象

{

"id":"11"",

//表示章节

"title":“第七章:I/0流”,

"children":[//其中的小节

{

"id":"19,

“title":“第三节:string类”

},

//第二个对象

{

"id"":“21",

"title”:"111000”

“id":"12"",

//表示章节

"title":“第一章:java入门",

"children"":[//其中的小节

“id”":"20",

“title":“第四节:程序风格"

完成后,进行前端部分整合。首先在 EduChapterController 中26行

代码添加跨域注解:@CrossOrigin


三、前端实现思路

查看课件01-课程大纲列表显示的前端部分,要实现前端部分有两种

方式,第一种按照之前课程分类列表的方式写个树形结构显示,可以

做到。

另一方式两者原理一致,因为在之前做树形结构中里面许多数据都做

了封装,只需要将其传穿个值即可,其中如何做到并不需要关心。在

此处我们从底层做起,将其自己做个显示。

1.定义 api

chapter.js

代码如下

importrequestfron"@/utils/request'

constapi_name="/admin/edu/chapter'

exportdefault{

getNestedTreeList(courseId){

returnrequest({

url:`${api_name}/nested-list/${courseId),

method:‘get’

2.定义组件脚本

(1)定义data

courseId:”',//所属课程

chapterNestedList:[]//章节嵌套课时列表

(2)created 中调用 init 方法

created(){

console.log('chaptercreated')

this.init()

(3)定义相关 methods 获取章节和课时列表

init(){

if(this.Sroute.params8&this.$route.params.Id){

this.courseId=this.$routeparams.Id

//根据 id 获取课程基本信息

this.fetchChapterNestedListByCourseId()

之前都是些查询的部分,主要看课件中定义组件模板。在此使用<ul

<li这个列表标签来实现。

在标签中做到遍历每一个章节,再在章节中遍历每一个小节。相比之

前方式,第二种方式就是使用<ur<li列表标签来实现列表的创建,

可以理解为是之前做树形结构的一个过程。包括之中的v-for后遍历

的章节和小节。

3.定义组件模板

<el-buttontype-"text">添加章节</el-button>

<!--章节-->

//使用<ul

<ulclass="chanpterList">

//<li列表标签来创建列表

<li

//先遍历章节

v-for="chapterinchapterNestedList"

:key="chapter.Id">

<p>

{{chapter.title}}

<spanclass="acts">

<el-buttontype="text">添加课时</el-button>

<el-buttonstyle=""type="text">编辑</el-button>

<el-buttontype="text">删除</el-button>

</span)

</p>

<!--视频-->

//再遍历章节中的每一个小节

<el-buttontype-"text">编辑</el-button>

<el-buttontype-"text">删除</el-button>


四、api 部分

1.在 api 中给方法做定义-chapter.js 部分

首先做一个准备,在api中将方法先定义。创建 chapter.js 借鉴 co

urse.js 中的代码复制过来进行更改。

chapter.js 代码

importrequestfrom'@/utils/request'

exportdefault{

//1根据课程 id 获取章节和小节数据列表

//方法名叫 getAllChapterVideo,传入参数名 courseId 课程 id

getAllChapterVideo(courseId){

returnrequest({

//接口地址:/eduservice/course,后面加上getChapterVideo{c

ourseId}传入课程id,可加大括号使用表达式写法,也可直接使用

字符串的拼接,在此使用字符串拼接形式。

url:'/eduservice/course/getChapterVideo/'+courseId,

//提交方式为get提交

method:'get'

//无需额外参数


五、页面部分

之后来到课程大纲的 chapter.vue 页面中,做最终的调用,把列表实

现出来。

1.引入chapter

首先在chapter.vue23行代码处引入chapter,同时加上它的地址。

代码如下:

importchapterfrom’@/api/edu’

2.定义方法

引入之后再method中定义方法

代码如下:

//根据课程id查询章节和小节

getChapterVideo(){

//chapter中的getAllChapterVideo方法,id为形参

chapter.getAllChapterVideo(id)

then(response=>{//response+箭头头函数

//通过response.data.名称将allChapterVideo数据得到,最后th

is做一个赋值

This.chapterVideoList=response.data.allChapterVideo

3.对变量做赋值

在chapter.vue中26行代码data()中对变量做定义。之后再返回m

ethod的定义方法getChapterVideo()中做赋值。

代码如下(红色部分为添加):

exportdefault{

data(){

return{

saveBtnDisabled:false,

//为一个数组类型

chapterVideoList:[]

4.在created中做调用

写完方法后,在chapter.vue32行代码created中做调用

代码如下:

created(){

//根据课程id查询章节和小节

This.getChapterVideo()

},

到此基本框架完成。

5.总结

在前端中首先建一个chapter页面,其中定义接口的方法。定义后在

chapter.vue页面中先引入,再调接口的方法,得到结果最终作做赋

值,在created()里面作调用。因为当一进入页面方法就要执行,得

到数据。

6.小问题

全部完成后,在methods的getChapterVideo()方法中chapter.g

etAllChapterVideo(id)需要传入课程id,还未实现。而在第一步加

完课程信息之后,添加成功的页面的路由上面,显示的值就是课程i

d,所以只需要在页面中将这个值得到,最后传给形参id即可。

包括在info.vue页面代码添加的时候,其中的saveOrUpdate()方法

中,186行代码就已经将这个id值返回了。我们的做法是在chapte

r.vue页面中将info.vue页面的值取出然后传过去。

(1)赋初始值

在chapter.vue代码中的data()为课程id赋初始值。

代码如下(红色部分为添加):

exportdefault{

data(){

return{

saveBtnDisabled:false,

courseId:’’,//课程id

chapterVideoList:[]

}

(2)定义方法

created({

//获取路由的id值

if(this.$route.params&&this.$route.params.id){

//将路由id值取出赋给id

this.courseIdthis.$route.params.id

//最后调用方法实现

//根据课程id查询章节和小节

This.getChapterVideo()

)

(3)将 method 中 getChapterVideo()的课程 id 传入

代码如下:

//根据课程 id 查询章节和小节

getChapterVideo(){

//chapter中的getAllChapterVideo方法,id为形参

//将课程id值传入

chapter.getAllChapterVideo(this.courseId)

.then(response=>{//response+箭头头函数

//通过 response.data.名称将 allChapterVideo数据得到,最后th

is做一个赋值

This.chapterVideoList=response.data.allChapterVideo

到此前端就将数据得到了。

(4)总结

先看路由中有无id值,即页面网址最后显示的数字,如:http:/fl

ocalhost:9528/#/course/chapter/123464788957445477中的12346

4788957445477。通过路由参数汲取的方式,取完之后调用方法

This.getChapterVideo(),将值传至 getChapterVideo()方法中做个

显示即可。

相关文章
|
6月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
循序渐进VUE+Element 前端应用开发(5)--- 表格列表页面的查询,列表展示和字段转义处理
|
3月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
67 0
|
6月前
|
存储 开发框架 前端开发
在Vue&Element前端项目中,对于字典列表的显示处理
在Vue&Element前端项目中,对于字典列表的显示处理
|
4月前
|
前端开发 程序员
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
84 19
|
4月前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
87 11
|
5月前
|
JavaScript 前端开发 程序员
后端程序员的前端必备-jQuery核心学习笔记
后端程序员的前端必备-jQuery核心学习笔记
69 13
|
6月前
|
前端开发
react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)
react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)
65 1
|
5月前
|
存储 开发框架 前端开发
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
EAV模型(实体-属性-值)的设计和低代码的处理方案(3)-- 实体属性定义及前端列表展示和数据录入处理
|
6月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用
循序渐进VUE+Element 前端应用开发(8)--- 树列表组件的使用
|
7月前
|
JSON 前端开发 JavaScript
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
SSMP整合案例第五步 在前端页面上拿到service层调数据库里的数据后列表
55 2