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

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

开发者学堂课程【微服务+全栈在线教育实战项目演练(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()方法中做个

显示即可。

相关文章
|
5月前
|
前端开发 JavaScript
Web前端之移动端课程开发之06.bootstrap
Web前端之移动端课程开发之06.bootstrap
48 0
|
8天前
|
存储 缓存 监控
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
【4月更文挑战第30天】本文探讨了Flutter中优化列表滚动性能的策略。建议使用`ListView.builder`以节省内存,避免一次性渲染所有列表项。为防止列表项重建,可使用`UniqueKey`或`ObjectKey`。缓存已渲染项、减少不必要的重绘和异步加载大数据集也是关键。此外,选择轻量级组件,如`StatelessWidget`,并利用Flutter DevTools监控性能以识别和解决瓶颈。持续测试和调整以提升用户体验。
【Flutter前端技术开发专栏】Flutter中的列表滚动性能优化
|
8天前
|
前端开发 数据处理
【Flutter 前端技术开发专栏】Flutter 中的滚动性能优化与无限列表实现
【4月更文挑战第30天】本文探讨了 Flutter 中的滚动性能优化和无限列表实现。关键点包括:1) 滚动性能直接影响用户满意度,优化可提升响应速度;2) 影响因素有布局复杂度、频繁重绘和数据处理;3) 优化措施包括懒加载、简化布局、减少不必要的重绘和高效处理数据;4) 无限列表通过监听滚动位置,动态加载新数据;5) 实现时注意加载策略、数据处理效率和内存管理。案例分析和总结强调了优化在实际开发中的重要性。
【Flutter 前端技术开发专栏】Flutter 中的滚动性能优化与无限列表实现
|
8天前
|
前端开发 UED 开发者
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
【4月更文挑战第30天】Flutter开发中,优化列表和滚动视图至关重要。本文介绍了几种优化方法:1) 使用`ListView.builder`和`GridView.builder`实现懒加载;2) 复用子组件以减少实例创建;3) 利用`CustomScrollView`和`Slivers`提升滚动性能;4) 通过`NotificationListener`监听滚动事件;5) 使用`KeepAlive`保持列表项状态。掌握这些技巧能提升应用性能和用户体验。
【Flutter前端技术开发专栏】Flutter中的列表与滚动视图优化
|
2月前
|
前端开发 JavaScript
前端Webpack5高级进阶课程
本套视频教程主要内容包含React/Vue最新版本脚手架分析、基于Webpack5编写自己的loader和plugin等,让你开发时选择更多样,最后,用不到一百行的代码实现Webpack打包。通过本套视频教程的学习,可以帮你彻底打通Webpack的任督二脉,技术水平更上一层楼,在开发项目的道路上畅通无阻
13 3
前端Webpack5高级进阶课程
|
2月前
|
前端开发 容器
web前端--------列表
web前端--------列表
19 0
|
7月前
|
存储 JavaScript 前端开发
手撕前端面试题【javascript~ 列表动态渲染、无重复数组、数组排序、新数组、创建数组、深浅拷贝、内存泄露等】
html页面的骨架,相当于人的骨头,只有骨头是不是看着有点瘆人,只有HTML也是如此。 css,相当于把骨架修饰起来,相当于人的皮肉。
40 0
|
9月前
|
Web App开发 前端开发 JavaScript
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber解决了什么问题
前端学习笔记202307学习笔记第五十七天-模拟面试笔记react-fiber解决了什么问题
98 0
|
9月前
|
前端开发 定位技术
前端学习笔记202305学习笔记第二十三天-地图单线程配置
前端学习笔记202305学习笔记第二十三天-地图单线程配置
66 0
前端学习笔记202305学习笔记第二十三天-地图单线程配置
|
5月前
|
移动开发 前端开发 JavaScript
web前端移动端课程之canvas教程系列
web前端移动端课程之canvas教程系列
49 0