Vue实现成绩增删案例思路详解

 更新时间:2025年05月06日 14:20:52   作者:2301_81616961  
这篇文章主要介绍了Vue实现成绩增删案例思路详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

案例功能需求

1.通过vue渲染数据,将成绩的相关信息显示出来(学号,学科,成绩)
2.能够增加相关的成绩信息
3.能够删除相关的成绩信息
4.能够自动统计总分以及平均分
5.在没有数据时,显示特定内容

案例实现

实现思路

数据渲染:
数据通过table表格来展示
通过v-for指令,将存储在数组中的数据嵌入td

 <tr v-for="item in list" :key="item.id">
               <td>{{item.id}}</td>
               <td>{{item.subject}}</td>
               <td>{{item.score}}</td>
               <td><a href=""  @click.prevent=" rel="external nofollow"  rel="external nofollow" del(item.id)">删除</a></td>
 </tr>

自动统计:
总分:通过computed计算属性,利用reduce()函数,对数组的成绩进行累加计算并返回累加结果

return this.list.reduce((sum, item) => sum + Number(item.score), 0)

平均分:
调用之前设计进行累加的计算方法,将获取的值除以信息总条数,获取平均分,并将其返回

return (this.show01 /this.list.length).toFixed(2)

增加信息:

对输入框添加v-model指令,进行数据的双向绑定,将输入的数据通过push(),放入存储数据的数组中

this.list.push({id:this.t1,subject:this.t2,score:this.t3})

删除信息:

创建方法,传入要删除信息的id(学号),遍历数组,将含有该id的信息从数组中删除

for(let i=0;i<this.list.length;i++){
                if(this.list[i].id==ID){
                    this.list.splice(i,1)
                    return;
                }
 }

显示特定内容:
通过v-if指令,当存储数据的数组长度为0时,将其设为true,则能将内容展示出来

<tbody v-if="ifshow<=0? true:false"></thbody>

完整代码

<template>
    <table>
        <thead>
            <tr>
                <th>学号</th>
                <th>学科</th>
                <th>成绩</th>
                <th>操作</th>
            </tr>
        </thead>
        <tbody v-if="ifshow>0? true:false">
            <tr v-for="item in list" :key="item.id">
               <td>{{item.id}}</td>
               <td>{{item.subject}}</td>
               <td>{{item.score}}</td>
               <td><a href=""  @click.prevent=" rel="external nofollow"  rel="external nofollow" del(item.id)">删除</a></td>
            </tr>
            <tr class="tr_01">
                <td colspan="2" class="td1">总分:{{show01}}</td>
                <td colspan="2" class="td2">平均分:{{ave}}</td>
            </tr>
        </tbody>
        <tbody v-if="ifshow<=0? true:false">
            <tr>
                <td colspan="4" class="td_01">数据为空</td>
            </tr>
        </tbody>
    </table>
    <div class="div_01">
        <label :class="{red :tt1,green: tt2}">{{show02}}</label><br>
        <span>
            <label for="">学号:</label>
            <input type="text" name="" id="" v-model="t1">
        </span><br>
        <span>
            <label for="">学科:</label>
            <input type="text" name="" id=""  v-model="t2">
        </span><br>
        <span>
            <label for="">成绩:</label>
            <input type="text" name="" id=""  v-model="t3">
        </span><br>
        <input type="submit" value="添加"  @click="add">
    </div>
</template>
<script>
  console.log(new Date())
  export default {
    data() {
        return {
            list:[{id:101,subject:'语文',score:99.9}],
            t1:"",
            t2:"",
            t3:"",
            show02:"",
            tt1:"",
             tt2:""
      }
    },
    methods:{
        del(ID){
            for(let i=0;i<this.list.length;i++){
                if(this.list[i].id==ID){
                    this.list.splice(i,1)
                    return;
                }
            }
        },
        add(){
            if(this.t1!=""&&this.t2!=""&&this.t3!=""){
                this.list.push({id:this.t1,subject:this.t2,score:this.t3})
                this.show02='正确'
                this.tt2=true
                this.tt1=false
            }else{
                this.show02='输入内容不全'
                this.tt2=false
                this.tt1=true
            }
            this.t1=this.t2=this.t3=""
            console.log(this.tt1)
            console.log(this.tt2)
        },
    },
    computed:{
        ifshow(){
            return this.list.length
        },
        show01(){
            return this.list.reduce((sum, item) => sum + Number(item.score), 0)
        },
        ave() {
            if (this.list.length === 0) {
                return 0
            }else{
                return (this.show01 / this.list.length).toFixed(2)
            }
        },
    }
  }
</script>
<style>
    *{
        margin: 0;
        padding: 0;
    }
    table{
        border: 1px solid black;
        /* 合并 */
        border-collapse: collapse;
        margin: 5px;
    }
    th,td{
        border: 1px solid black;
        width: 100px;
        height: 50px;
        text-align: center;
    }
    .td_01{
        height: 130px;
    }
    .tr_01 td{
        border: none;
    }
    .td1{
        text-align: right;
        padding-right: 10px;
    }
    .td2{
        text-align: left;
        padding-left: 10px;
    }
    .div_01{
        position: fixed;
        left: 500px;
        top: 30px;
    }
    label{
        font-size: 18px;
    }
    input[type="text"]{
        width: 175px;
        height: 25px;
    }
    input[type="submit"]{
        display: block;
        margin: 5px auto;
        width: 47px;
        height: 27px;
    }
    .red{
        margin-left: 50px;
        color: red;
    }
    .green{
        margin-left: 50px;
        color: green;
    }
</style>

功能演示

初始页面

增添信息

删除信息

无数据

案例小结

1.要在不同的情况下,显示不同的页面,可以通过v-if或v-show指令实现。v-if只有在true时,才会进行页面的渲染,而v-show无论什么情况都会进行页面的渲染。

2.v-bind指令,可以用来改变属性值(class、href、style),通过数组或对象来存放属性值。以class为例,对象{类名 ,布尔型(true,false)},当为true时,该类才会添加到元素中。数组[类名 , 类名],适合用来一次性添加大量类名或删除。

3.computed属性通常是用来返回值,也就是可读的。在进行调试时,若给定义的计算属性赋值,会发现,值不会改变。若需要一个可读写的计算属性,可以通过定义get、set进行实现。

到此这篇关于Vue实现成绩增删案例的文章就介绍到这了,更多相关Vue成绩增删内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue - props 声明数组和对象操作

    vue - props 声明数组和对象操作

    这篇文章主要介绍了vue - props 声明数组和对象操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Element-Plus表格实现Table自定义合并行数据

    Element-Plus表格实现Table自定义合并行数据

    在开发项目中,我们时常会用到表格,许多需求可能会要求自定义特定的行或列,下面就跟随小编一起来学习一下在实际开发中如何实现这一要求吧
    2024-12-12
  • vue基于element-ui的三级CheckBox复选框功能的实现代码

    vue基于element-ui的三级CheckBox复选框功能的实现代码

    最近vue项目需要用到三级CheckBox复选框,需要实现全选反选不确定三种状态。这篇文章主要介绍了vue基于element-ui的三级CheckBox复选框功能的实现方法,需要的朋友可以参考下
    2018-10-10
  • Vue3之 Vue CLI多环境配置

    Vue3之 Vue CLI多环境配置

    这篇文章主要介绍了Vue3之 Vue CLI多环境配置,通俗点说就是使用配置文件来管理多环境,实现环境的切换,西阿棉详细内容,需要的朋友可以参考一下
    2021-11-11
  • 前端vue3使用axios调用后端接口的实现方法

    前端vue3使用axios调用后端接口的实现方法

    vue本身不支持ajax接口的请求,所以在vue中经常使用axios这个接口请求工具,下面这篇文章主要给大家介绍了关于前端vue3使用axios调用后端接口的实现方法,需要的朋友可以参考下
    2022-12-12
  • vue的axios使用post时必须使用qs.stringify而get不用问题

    vue的axios使用post时必须使用qs.stringify而get不用问题

    这篇文章主要介绍了vue的axios使用post时必须使用qs.stringify而get不用问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • Vue中使用flv.js播放视频的示例详解

    Vue中使用flv.js播放视频的示例详解

    这篇文章主要为大家详细介绍了如何在Vue项目中使用flv.js播放视频,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • 去除element-ui下拉框的下拉箭头的实现

    去除element-ui下拉框的下拉箭头的实现

    我们最开始拿到的element-ui是带有下拉箭头的,那么如何去除element-ui下拉框的下拉箭头的实现,本文就详细的介绍一下,感兴趣的可以了解一下
    2023-08-08
  • Vue和React的异同点解读

    Vue和React的异同点解读

    文章比较了Vue和React的核心设计理念、响应式系统、虚拟DOM、编译时优化和功能特性,Vue通过编译时优化和响应式系统实现细粒度更新,而React依赖运行时调度(Fiber)实现可控的更新优先级,两者都支持函数式编程,但React在函数式编程方面提供了更高的灵活性
    2025-02-02
  • vue填坑之webpack run build 静态资源找不到的解决方法

    vue填坑之webpack run build 静态资源找不到的解决方法

    今天小编就为大家分享一篇vue填坑之webpack run build 静态资源找不到的解决方法。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09

最新评论