通过前几节的认识和学习,我们掌握了常用v标签的用法,这一节再来巩固提高一下吧。

实例:成绩面板

实现功能:

主体由两大部分组成:表格+表单。这个表格可以显示多科成绩,并具有表头、删除以及底部统计功能。同时,在下方还有一个成绩输入表单,允许用户添加科目成绩,新添加的成绩会实时显示在表格中。

思路:

综合运用不同v标签的使用

代码:

html:

    <div id="app">
<table>
<thead>
<tr>
<th>编号</th>
<th>科目</th>
<th>成绩</th>
<th>操作</th>
</tr>
</thead>
<!-- 表格主体部分:使用v-if/else切换不同显示-当表格为空时,显示“暂无数据” -->
<tbody v-if="list.length > 0">
<tr v-for="(item, index) in list" :key="item.id">
<td>{{ index+1 }}</td>
<td>{{ item.name }}</td>
<!-- 当成绩低于60分时,触发red类样式 -->
<td :class="{red: item.score < 60}">{{ item.score }}</td>
<!-- .prevent修饰符,阻止<a>标签的默认跳转行为 -->
<td><a @click.prevent="del(item.id)" href="">删除</a></td>
</tr>
</tbody>
<tbody v-else>
<tr>
<td colspan="5">暂无数据</td>
</tr>
</tbody>
<footer>
<tr>
<td colspan="5">
总分: {{ total }}
平均分:{{ mean }}
</td>
</tr>
</footer>
</table> 科目:<input v-model.trim="subject" placeholder="请输入科目">
<br>
分数:<input v-model.number="score" placeholder="请输入分数">
<br>
<button @click="add()">确认</button>
</div>

js:

<script>
const app = new Vue({
el: '#app',
data: {
list:[
{id: 1, name: '语文', score: 46},
{id: 7, name: '数学', score: 77},
{id: 13, name: '英语', score: 85},
{id: 14, name: '体育', score: 95},
],
subject: '',
score: ''
},
methods: {
del(id) {
console.log(id)
this.list = this.list.filter(item => item.id != id);
},
add() {
if(this.subject === ''){
alert('请输入科目名称!')
return
}
if(this.score > 100 || this.score < 0){
alert('请输入0-100内的成绩!')
return
}
// 数组的push()和unshift()都是在原数组的基础上操作
this.list.push({
id: +new Date(),
name: this.subject,
score: this.score
} )
}
},
computed: {
total(){
return this.list.reduce((sum,item) => sum + item.score, 0)
},
mean(){
if(this.list.length === 0){
return 0
}
return (this.total/this.list.length).toFixed(2)
}
}
})
</script>

css:

<style>
table{
width: 400px;
height: 300px;
border-collapse: collapse;
margin-bottom: 20px;
text-align: center;
}
th,td{
border:1px solid black;
}
.red{
color: red;
}
</style>

注意:

案例中还有很多小的注意,比如:当成绩小于60分时,成绩要高亮显示-这要求使用v-bind动态控制元素的样式;表单元素输入要求去首尾空格、字符转数字-要求使用v-model的修饰符trim和number;当成绩表格为空时要求显示“暂无数据”面板-可以使用v-if/else根据数据长度动态切换显示...

Vue学习:8.v标签综合-强化版的更多相关文章

  1. vue学习之template标签

    HTML5提供的新标签,具有以下特性: 1.该元素天生display:none,同时模板元素内部内容也是隐藏的 2.位置任意,可以在<head>中,也可以在<body>或者&l ...

  2. vue学习笔记(二)——简单的介绍以及安装

    学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html ...

  3. vue学习第一部

    目录 基础操作 vue基础使用 步骤 vue的框架思想(mvvm) 显示数据 vue 常用指令 属性操作 事件绑定 操作样式 条件渲染指令 列表渲染指令 vue对象提供的属性功能 过滤器 计算和侦听属 ...

  4. Vue学习记录第一篇——Vue入门基础

    前面的话 Vue中文文档写得很好,界面清爽,内容翔实.但文档毕竟不是教程,文档一上来出现了大量的新概念,对于新手而言,并不友好.个人还是比较喜欢类似于<JS高级程序设计>的风格,从浅入深, ...

  5. day 82 Vue学习二之vue结合项目简单使用、this指向问题

    Vue学习二之vue结合项目简单使用.this指向问题   本节目录 一 阶段性项目流程梳理 二 vue切换图片 三 vue中使用ajax 四 vue实现音乐播放器 五 vue的计算属性和监听器 六 ...

  6. day 81 Vue学习一之vue初识

      Vue学习一之vue初识   本节目录 一 Vue初识 二 ES6的基本语法 三 Vue的基本用法 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 vue初识 vue称为渐进式js ...

  7. vue学习笔记(九)vue-cli中的组件通信

    前言 在上一篇博客vue学习笔记(八)组件校验&通信中,我们学会了vue中组件的校验和父组件向子组件传递信息以及子组件通知父组件(父子组件通信),上一篇博客也提到那是对组件内容的刚刚开始,而本 ...

  8. vue学习笔记(十)路由

    前言 在上一篇博客vue学习笔记(九)vue-cli中的组件通信内容中,我们学习组件通信的相关内容和进行了一些组件通信的小练习,相信大家已经掌握了vue-cli中的组件通信,而本篇博客将会带你更上一层 ...

  9. Vue学习笔记十三:Vue+Bootstrap+vue-resource从接口获取数据库数据

    目录 前言 SpringBoot提供后端接口 Entity类 JPA操作接口 配置文件 数据库表自动映射,添加数据 写提供数据的接口 跨域问题 前端修改 效果图 待续 前言 Vue学习笔记九的列表案例 ...

  10. Vue学习之vue-cli脚手架下载安装及配置

    Vue学习之vue-cli脚手架下载安装及配置:https://www.cnblogs.com/clschao/articles/10650862.html 1. 先下载node.js,下载地址:ht ...

随机推荐

  1. Dubbo 3.0 前瞻系列 | 2020双11,Dubbo3.0 在考拉的超大规模实践

    很多开发者一直以来好奇:阿里自己有没有在用Dubbo,会不会用Dubbo?在刚刚结束的双11,我们了解到阿里云今年提出了"三位一体"的理念,即将"自研技术".& ...

  2. 2021年阿里云年中钜惠攻略,注册即可抽 iPhone 12 Pro 等好礼

    简介: 七月流火,燃情盛夏!值此季节,阿里云又推出了年中钜惠,精选百款产品,助力创业新势力.从7月26日开始,每天上午10点.下午4点将会放出爆款产品,进行限量秒杀,大家不要错过.注册登陆还可抽取 i ...

  3. [Go] gorm 错误处理 与 链式/Finisher方法

    使用 gorm 在调用 Finisher 方法之后,建议都进行错误检查. Finishers 是会立即执行注册回调的方法,然后生成并执行 SQL,比如这些方法: Create, First, Find ...

  4. [FAQ] Smart Contract: xxx has not been deployed to detected network (network/artifact mismatch)

    在前端用 web3 与 contract 交互时,需要获取到已部署的 contract 实例进行操作,如果没有获取到就会报此错. 比如如下的 .deployed() 阶段: /* 伪代码 */ con ...

  5. OpenAI未至,Open-Sora再度升级!已支持生成16秒720p视频

    Open-Sora 在开源社区悄悄更新了!现在支持长达 16 秒的视频生成,分辨率最高可达 720p,并且可以处理任何宽高比的文本到图像.文本到视频.图像到视频.视频到视频和无限长视频的生成需求.我们 ...

  6. Golang 爬虫02

    验证邮箱 目标站点: https://movie.douban.com/top250

  7. three.js教程7-PBR材质与环境贴图CubeTextureLoader

    1.PBR材质 PBR是基于物理的渲染(physically-based rendering).模拟物体表面的反射算法. Three.js提供了两个PBR材质相关的类MeshStandardMater ...

  8. 欧洲对 Splashtop 远程计算机实验室的需求增长十倍

    ​2021 年 1 月 7 日,加利福尼亚州圣何塞 - 远程访问和远程支持解决方案的全球领导者 Splashtop Inc. 报告称其对用于教育的远程实验室访问软件的需求在欧洲激增,在 2020 年第 ...

  9. 服务器电源管理(Power Management States)

    目录 文章目录 目录 EIST(智能降频技术) 硬件 固件 操作系统 EIST(智能降频技术) EIST 能够根据不同的 OS(操作系统)工作量自动调节 CPU 的电压和频率,以减少耗电量和发热量.它 ...

  10. angualr2+ 性能优化-trackBy

    1.使用trackBy提高性能 为什么使用trackBy进行性能优化,在平时的开发中,我们对数组的处理基本都是通过接口获取新的数组进行替换或push,但是在这个过程中,Angular不知道你是要做什么 ...