课程管理-修改课程信息(前端) | 学习笔记

简介: 简介:快速学习课程管理-修改课程信息(前端)

开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程管理-修改课程信息(前端)】学习笔记,与课程紧密联系,让用户快速学习知识。

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


课程管理-修改课程信息(前端)

 

内容介绍

一、测试错误

二、下拉列表数据回显

三、总结

四、最终结果测试

 

一、测试错误

1.错误

将上节课的403错误的接口路径纠正后,此时点击上一步后的页面数据能够做显示。为了明显再重新添加一次数据进行测试,标题为10108888,一级分类为前端开发,二级分类为 JavaScript,课程讲师为王五,总课时为10,课程简介为111222,课程封面默认,课程价格为10。

image.png

数据都设置完成后点击保存并下一步,添加数据。然后点击上一步,查看是否能成功的完成数据回显。

image.png

可以看到点击上一步后,显示的页面数据都是正确的。

但其中的二级分类值没有回显,变为了一串数字。正确效应应该是点击一级分类,显示当前选择的一级分类值以及其他值,二级分类显示之前选的二级分类,有其他值,但此时是不对的。

对照二级分类显示的一串数字尾号4049,发现该数字对应着表中存在表中二级分类的id值,说明此时二级分类的 id 值能够传过来,但是值并没有成功传过去。

image.png

2. 原因分析

因为在 info.vue 页面中之前写一级二级时写了二级联动效果,此时一级效果会显示,但是其对应的二级分类默认没有值可以显示。

当点一级分类二级分类才有值。此时问题即为二级分类此时没有值,但却传了值,所以使用了 v-model 将 courseInfo.subjectId 做了显示。

l 代码如下:

<!--所属分类TODo -->

<el-form-item label="课程分类">

<el-select

v-model="courseInfo.subjectParentId"

placeholder="一级分类”achange="subjectLevelOneChanged">

<el-option

v-for="subject in subjectoneList"

: key="subject.id"

: label="subject.title"

:value="subject.id" />

</el-select>

<!--二级分类-->

<el-select v-model="courseInfo.subjectId" placeholder="二级分类">

<el-option

v-for="subject in subjectTwoList"

: key="subject.id”

: label="subject.title"

: value="subject.id" / >

</el-select>

</el-form-item>

但一级分类是每次进入页面中都会进行查询:This.getOneSubject()同时在使用getOneSubject()方法中 subjectOneList 中有一级分类的数据。所以一级分类有值。

l 代码如下:

//查询所有的一级分类

getoneSubject() {

subject.getSubjectList()

.then( response => {

this.subjectOneList= response.data.list})

})

},

但二级分类中的 subjectTwoList 每次进入页面为空,所以没有值。不能做显示,所以看到的效果就是一串 id 值,其中下拉列表没有值。

image.png

l 代码如下:

<!--二级分类-->

<el-select v-model="courseInfo.subjectId" placeholder="二级分类">

<el-option

v-for=""subject in subjectTwoList

: key="subject.id"

: label="subject.title"

: value="subject.id" />

</el-select>

</el-form-item>

以上就是需要解决的问题,在此先介绍底层做法,再用框架实现。该过程也是在javaweb 中学到的,都是之前知识,真正过程不必非常繁琐。

 

二、下拉列表数据回显

1.思路分析

比方此时有一个下拉列表,其中有许多数据,假设第一次添加时选的一级分类为前端开发,再回显时前端开发就会被默认选中。

下拉列表就会显示其他值。默认选中是通过拿存储 id 值和分类所有 id 值进行比较,在此就是拿着前端开发id值和前端开发、后端开发和数据库开发 id 值一一比较,查看哪个 id 值是一样的。如果比较相同,就让相同值进行数据回显。

image.png

要做到数据回显使用<seledct></select>标签。假设此时为前端开发就在其中添加一个<option>前端开发</option>,如果要添加选中效果则在 option 后加一个selected,一般为 selected=“selected”,仅仅写 selected,也可以。此为 web 中的基础内容。

l 代码如下:

<select>

<option selected="selected">前端开发</option>

</select>

此外还可以使用复选框和单选框选中的效果。

l 代码如下:

//复选框选中

<input type="checkbox" checked/>

//单选框选中

<input type="radio" checked/>

此时下拉列表的显示就是根据存储 id 和分类所有 id 进行比较,如果比较相同,就添加一个 selected 属性默认选中,而并不需要手动添加,框架中会自行添加,如果我们自己要添加只能使用 JavaScript 代码。在页面 info.vue 代码中都已经帮我们完成,现在只需要将 subjectOneList 一级分类值传过来,包括 subjectParentId 的 id 值传过来会自动进行比较,如果相同则会回显,我们只需要传id值和数组值。

一级分类在进入页面都做了初始化,能够显示。而二级分类中只有id值subjectTwoList,而集合中没有值,无法回显,只能将 id 值传了过来,出现了以下效果。

image.png

我们的框架中只需要传入 id 值和数组值即可。其他值不需要,首先进行分析。

找到 info.vue 中 created()是先获取路由id值,得到课程 id,再根据课程 id 得到里面的课程信息。在 courseInfo 中会有课程的信息。

l 代码如下:

created(){

//获取路由id值

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

this.courseId = this.$route.params.id

//调用根据id查询课程的方法

this.getInfo()

}

之后再 methods 中 courseInfo 中有课程信息,包含一级分类 id 和二级分类id两者全有,此时一级分类既有数组又有值,二级分类值 subjectTwoList 为空。

此时就是为了让一级分类下的二级分类 subjectTwoList 有值,有一级分类下面的所有二级分类。

methods:{

//根据课程id查询

getInfo(){

course.getCourseInfoId(this.courseId)

.then( response => {

//在courseInfo中有课程信息,包含一级分类id和二级分类id

this.courseInfo = response.data.courseInfovo

})

}

2.解决方法

做法有多种方式,还是使用前端做法,与二级联动相似。借鉴下方课件代码,先做获取然后 else 初始化分类列表,再获取列表等等。

l 代码如下:

init() {

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

const id = this.$route.params.id

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

this.fetchCourseInfoById(id)

}else {

this.courseInfo = { ...defaultForm }

//初始化分类列表

this.initSubjectList(

//获取讲师列表

this.initTeacherList(

}

},

主要为以下,首先为根据id查询,查出基本信息。查出来后根据再调用接口,将所有的一级二级分类全部查出来。

之后做个判断,判断当前默认回显一级分类的 id 和所选的一级分类id是否相同。一样则取出它的二级分类值,使其有值。也就是该过程,查出所有一级二级分类,然后做个比较。

l 代码如下:

//根据 id 值查询课程基本信息 courseInfo

fetchCourseInfoById(id){

course.getCourseInfoById(id).then(responseCourse =>{

this.courseInfo = responseCourse.data.item

//初始化分类列表

//通过再调用接口,将所有一级二级分类查出来

subject.getNestedTreeList().then(responseSubject => {

this.subjectNestedList = responseSubject.data.items

for (let i -e; i < this.subjectNestedList.length; i++){

//判断当前默认回显一级分类的id和所选的一级分类id是否相同

if (this.subjectNestedList[i].id === this.courseInfo.subjectParentId){

//如果一样,将一级分类对应的二级分类值取出,让subSubjectList有值。

this.subSubjectList = this.subjectNestedList[i.].children

}

}

})

3. 代码实现

(1)Created()部分

首先在created()的if中加个 else,变为如下。表示如果路由中有id值做修改,如果没有id值做添加,添加就可以加载。因为 id 有值做的是回显,没有值是添加。

l 代码如下:

created() {

//获取路由id值

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

//路由中有id值

//修改操作

this.courseId = this.$route.params.id

//调用根据id查询课程的方法

this.getInfo()

} else {//路由中没有id值,做添加

//添加操作

//初始化所有讲师

this.getListTeacher( )

//初始化一级分类

this.getoneSubject()

}

},

(2)methods 部分

之后再 methods中的 getInfo()方法后添加代码。

l 代码如下:

methods:{

//根据课程id查询

getInfo(){

course.getCourseInfoId(this.courseId)

.then( response => {

//在courseInfo中有课程信息,包含一级分类id和二级分类id

this.courseInfo = response.data.courseInfovo

//1查询所有的分类,包含一级和二级。调用subject中的getSubjectList()方法,其中含有封装的一级二级数据所有结构。

subject.getSubjectList()

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

//2获取所有一级分类

在获取EduSubjectController中得知所有一级分类名为list,使用response.date.名称获取。最后将其赋值给subjectoneList一级分类数组得到所有一级分类。

this.subjectoneList = response.data.list

//3 把所有的一级分类数组进行遍历,比较当前courseInfo里面一级分类id和所有的一级分类id是否一样,因为courseInfo是回显的一级分类id,subjectoneList有所有的一级分类id。

for(var i=0;i<this.subjectonelist. length;i++) {

//获取每个一级分类

var oneSubject = this.subjectOneList[i]

//比较当前courseInfo里面一级分类id和所有的一级分类id,是否一样

if(this.courseInfo.subjectParentId == oneSubject.id){

//如果相同,获取一级分类所有的二级分类,最后将其赋值给info.vue页面中定义的subjectTwoList。

this.subjectTwoList = oneSubject.children

}

//初始化所有讲师

this.getListTeacher( )

})

}

以上代码的目的是为了将一级分类下面的所有的二级分类取到,包括课程中 id 值,会帮我们做到数据回显。与之前分析一致,只要有数组和 id 值就能实现数据回显,在其中加个 selected,使用框架帮我们做到。

 

三、总结

写法就是首先在页面中得到路由中的课程id,得到之后调用 getInfo方法。在方法中先把课程的基本信息得到,其中包含课程名称,简介等等,也包含一级二级分类id。得到之后将所有分类都查出来,因为需要构建二级分类。获取一级分类后,做遍历,遍历之后比较比较当前 courseInfo 里面一级分类 id 和所有的一级分类 id,是否一样。如果一样将这个一级分类里面的二级分类取出来,构建集合值subjectTwoList,因为有了集合值和di值就能实现数据回显。最后将讲师的代码也放在 getInfo()中,因为它也需要做数据回显。

 

四、最终效果测试

1.测试效果

完成之后,查看效果如何。首先启动代码,启动后,来到前端页面,添加一条新数据:标题为1010666,一级分类为前端开发,二级分类为 JavaScript,课程讲师为王五,总课时为10,课程简介为111,课程封面默认,课程价格为10。

image.png

image.png

点击保存并下一步,提示添加成功后。

image.png

点击上一步,可以看见数据成功回显。一级分类和二级分类的值都显示出来了。包括在二级中也有其他值,一级中也有其他值。还可以进行下一步修改。

image.png

到此数据回显就实现了。最后梳理一遍:只需要两个值一个是一级分类和二级分类的数组,第二个就是对应的一级分类和二级分类的值,将两者全部传过去,就能做到数据回显,这是框架本身做到的。但如果写JavaScript原始代码就需要手动做到。

2. 小 bug

但在此处仍存在一个问题,当点击上一步回显后,再次添加课程添加新数据时,再次进入第一步填写课程基本信息的页面时,表单数据并未清空,所以我们要将其清空。同学们参考讲师部分内容,自行完成,不作讲解。

image.png

相关文章
|
5月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
90 0
|
5月前
|
人工智能 前端开发 JavaScript
拿下奇怪的前端报错(一):报错信息是一个看不懂的数字数组Buffer(475) [Uint8Array],让AI大模型帮忙解析
本文介绍了前端开发中遇到的奇怪报错问题,特别是当错误信息不明确时的处理方法。作者分享了自己通过还原代码、试错等方式解决问题的经验,并以一个Vue3+TypeScript项目的构建失败为例,详细解析了如何从错误信息中定位问题,最终通过解读错误信息中的ASCII码找到了具体的错误文件。文章强调了基础知识的重要性,并鼓励读者遇到类似问题时不要慌张,耐心分析。
108 5
|
6月前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`&lt;select&gt;` 和 `&lt;option&gt;`)、文本域(`&lt;textarea&gt;`)、标签解释(`&lt;label&gt;`)、各类按钮(`&lt;button&gt;`)及表单重置功能、无语义布局标签(`&lt;div&gt;` 和 `&lt;span&gt;`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
100 6
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
7月前
|
JavaScript 前端开发 程序员
后端程序员的前端必备-jQuery核心学习笔记
后端程序员的前端必备-jQuery核心学习笔记
79 13
|
7月前
|
前端开发 算法 Serverless
中后台前端开发问题之保证用户的token等信息的唯一性和不可伪造性如何解决
中后台前端开发问题之保证用户的token等信息的唯一性和不可伪造性如何解决
80 0
|
8月前
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
循序渐进VUE+Element 前端应用开发(4)--- 获取后端数据及产品信息页面的处理
|
9月前
|
JavaScript 前端开发 Java
基于SpringBoot+Vue+uniapp的在线开放课程的Web前端的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的在线开放课程的Web前端的详细设计和实现(源码+lw+部署文档+讲解等)
|
8月前
|
前端开发
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
支付系统--微信支付21--搭建前端环境,payment-demo-front这个项目文件夹是前端显示文件,payment-demo是后端项目,支付页面常见三个页面:购买课程,我的订单,下载账单
|
8月前
|
前端开发
前端 CSS 经典:鼠标位置信息
前端 CSS 经典:鼠标位置信息
62 0
|
10月前
|
JavaScript 前端开发
TypeScript 学习笔记(六):TypeScript 与前端框架的结合应用
笔记,进一步提升 TypeScript 编程技能。
142 1

热门文章

最新文章