Chapter 05 计算属性
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="./styles/" />
<title>成绩管理</title>
</head>
<body>
<div id="app" class="score-case">
<div class="table">
<table>
<thead>
<tr>
<th>编号</th>
<th>科目</th>
<th>成绩</th>
<th>操作</th>
</tr>
</thead>
<tbody v-if=">0">
<tr v-for="(item,index) in list" :key="">
<td>{{index+1}}</td>
<td>{{}}</td>
<td :class="{red:<60}">{{}}</td>
<td><a href="#" @click="del()">删除</a></td>
</tr>
</tbody>
<tbody v-else>
<tr>
<td colspan="5">
<span class="none">暂无数据</span>
</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="5">
<span>总分:{{totalScore}}</span>
<span style="margin-left: 50px">平均分:{{averageScore}}</span>
</td>
</tr>
</tfoot>
</table>
</div>
<div class="form">
<div class="form-item">
<div class="label">科目:</div>
<div class="input">
<input
type="text"
placeholder="请输入科目"
="subject"
/>
</div>
</div>
<div class="form-item">
<div class="label">分数:</div>
<div class="input">
<input
type="text"
placeholder="请输入分数"
="score"
/>
</div>
</div>
<div class="form-item">
<div class="label"></div>
<div class="input">
<button class="submit" @click="add()">添加</button>
</div>
</div>
</div>
</div>
<script src="/npm/vue/dist/"></script>
<script>
const app = new Vue({
el: '#app',
data: {
list: [
{ id: 1, subject: '语文', score: 20 },
{ id: 7, subject: '数学', score: 99 },
{ id: 12, subject: '英语', score: 70 },
],
subject: '',
score: ''
},
methods: {
/* filter方法:用于创建一个新数组,包含所有通过测试的元素
测试条件是每个元素的 id 不等于要删除的 id */
del(id){
this.list=this.list.filter(item=>item.id!==id)
},
/* add方法:负责在列表的开头添加一条新的成绩记录 */
add(){
if(!this.subject){
alert("请输入科目")
return
}
if(typeof this.score!=='number'){
alert("请输入正确的成绩")
return
}
/* unshift方法:用于在数组的开头添加一个或多个元素,并返回新数组的长度
id: 使用当前时间戳作为新成绩的唯一标识
+new Date():将当前日期转换为毫秒数,确保每条记录的 id 是唯一的 */
this.list.unshift({
id:+new Date(),
subject:this.subject,
score:this.score
})
this.subject=''
this.score=''
}
},
computed:{
/* reduce方法:用于将数组中的所有元素汇总为一个单一的值
(sum, item) => sum + : 一个累加函数 */
totalScore(){
return this.list.reduce((sum,item)=>sum+item.score,0)
},
averageScore(){
if(this.list.length===0){
return 0
}
/* .toFixed()方法:用于将一个数字格式化为字符串,保留指定的小数位数 */
return (this.totalScore/this.list.length).toFixed(2)
}
}
})
</script>
</body>
</html>