Chapter 05 计算属性

时间:2025-05-10 06:59:45
<!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>