使用数据绑定和计算属性实现: 在页面上每次输入一个学生的多门课程的成绩,计算该学生的总分和平均分并将所有学生的平均分和总分显示在输入数据区域的下方
时间: 2024-09-29 18:12:31 浏览: 35
要实现这个功能,我们可以创建一个Vue组件,其中包含学生列表、每个学生的成绩输入以及对应的总分和平均分计算。这里是一个简单的例子:
首先,设置一个Vue实例,数据结构存储学生的姓名、数组,用于存放各个科目的成绩:
```javascript
data() {
return {
students: [
{ name: '', courses: [{ subject: '数学', score: 0 }, { subject: '英语', score: 0 }, { subject: '科学', score: 0 }] },
// 添加更多学生...
],
};
},
```
然后,为`v-model`添加数据绑定,让用户可以在表单内输入成绩:
```html
<template>
<div>
<!-- 假设这是表格行 -->
<tr v-for="(student, index) in students" :key="index">
<td>{{ student.name }}</td>
<td v-for="(course, courseIndex) in student.courses" :key="courseIndex">
<input type="number" v-model="student.courses[courseIndex].score" />
{{ course.subject }} - {{ student.courses[courseIndex].score }}
</td>
<td>总分: {{ student.totalScore }}</td>
<td>平均分: {{ student.averageScore }}</td>
</tr>
<tr>
<td><h4>所有学生的平均分</h4></td>
<td>平均分: {{ allStudentsAverageScore }}</td>
</tr>
<tr>
<td><h4>所有学生的总分</h4></td>
<td>总分: {{ allStudentsTotalScore }}</td>
</tr>
</div>
</template>
```
接下来,计算属性(`computed`)用来实时更新总分和平均分:
```javascript
computed: {
studentTotalScore(student) {
let total = 0;
for (const course of student.courses) {
total += course.score;
}
return total;
},
studentAverageScore(student) {
if (student.courses.length === 0) {
return 0;
}
return this.studentTotalScore(student) / student.courses.length;
},
allStudentsTotalScore() {
let total = 0;
for (const student of this.students) {
total += this.studentTotalScore(student);
}
return total;
},
allStudentsAverageScore() {
if (this.students.length === 0) {
return 0;
}
return this.allStudentsTotalScore / this.students.length;
},
},
```
现在当你在表单里输入成绩时,学生和所有学生的总分和平均分都会自动计算并显示。
阅读全文