vue代办事件案例实战练习,配有答案解析

代办事件案例

  • 该案例,综合了前面所学的知识,列入点击事件绑定,双向绑定,v-for循环语句,v-model双向绑定,以及input标签的不同type形式。

    演示代码如下:

<template >
<div id="kuagjia">
    <div >
        <div class="top"><span style="margin-left: -700px;">学习计划表</span></div>
        <div class="hang1">
            <div>学习科目<input type="text" placeholder="请输入学习科目" v-model="addSj"></div>
            <div>学习内容<textarea placeholder="请输入学习内容" v-model="addContent" ></textarea></div>
            <div>学习地点
                <select v-model="addPlace">
                    <option>自习室</option>
                    <option>教室</option>
                    <option>图书馆</option>
                </select>
            </div>
            <div><button @click="addImg">添加</button></div>
        </div>
    </div>
    <div>
        <table id="table" border="1px" cellspacing="0">
            <thead>
                <tr>
                    <th>序号</th>
                    <th>学习科目</th>
                    <th>学习内容</th>
                    <th>学习地点</th>
                    <th>完成状态</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody  >
                <tr v-for="(i,index) in arrImg">
                    <td>{{ index+1 }}
                    </td>
                    <td>{{ i.sj }}</td>
                    <td>{{ i.content }}</td>
                    <td>{{ i.place }}</td>
                    <td >
                        
                        <label class="switch">
	                    <input type="checkbox"   v-model="i.status"     >
	                    <span class="slider round"></span>
                        </label>{{ i.status ? "完成":"未完成" }}
                    </td>
                    <td @click="delImg(i.id, i.status)">删除</td>
                </tr>
            </tbody>
        </table>
    </div>
</div>


</template>

<script setup>
import {ref}  from  'vue';
const addSj = ref('')
const addContent = ref('')
const addPlace = ref('')
const ids = ref(1)
const arrImg =ref([]) 


const addImg = () =>{
    if (addSj.value === '' || addContent.value === ''){
        alert('学习科目和学习内容都不能为空')}else{

    var addSjIs = addSj.value
    var addContentIs = addContent.value
    var addPlaceIs = addPlace.value
    var idss = ids.value++
    var a = {id : idss, sj : addSjIs, content : addContentIs, place : addPlaceIs, status: false}
    arrImg.value.push(a)

}
}
const delImg = (id, status) =>{
    if (status) {
        arrImg.value = arrImg.value.filter(x => x.id != id )
    }else{
        alert('没有做完是不会被删除的')
    }

    }
</script>

<style>
#kuagjia{

    width: 800px;
    height: 400px;
    border: 1xp solid;
    background-color: antiquewhite;
}
.top{
    width: 800px;
    height: 30px;
    background-color: gray;
    padding-left: 0px;
  
}
.hang1{
    display: flex;
  
    
}
#table{
    border: 1px solid;
    width: 800px;
    margin-top: 20px;
    
}
/* 开关 */
/* 开关 - 滑块周围的框 */
.switch {
	--width:22px;
	position: relative;
	display: inline-block;
	width: calc(var(--width) * 2);
	height: var(--width);
}
 
/* 隐藏默认 HTML 复选框 */
.switch input {
	opacity: 0;
	width: 0;
	height: 0;
}
 
/* 滑块 */
.slider {
	position: absolute;
	top: 0;
	left: 0;
	right: 0;
	bottom: 0;
	cursor: pointer;
	background-color: #ccc;
	transition: .4s;
}
 
/* 轨道*/
.slider.round {
	border-radius: 34px;
}
/* 圆形滑块 */
.slider.round::before {
	border-radius: 50%;
}
 
.slider::before {
	position: absolute;
	content: "OFF"; 
	height: var(--width);
	width: var(--width);
	left: 0px;
	bottom: 0px;
	background-color: white;
	-webkit-transition: .4s;
	transition:all .4s;
	font-size: 10px;
	text-align: center;
	line-height: var(--width);
	color: #ccc;
}
 
input:checked+.slider {
	background-color: #2196F3;
}
 
input:checked+.slider:before {
	transform: translateX(var(--width));
	content: "ON"; 
	color: #2196F3;
}
button{
    background-color: #ccc;
    margin-left: 20px;
}
</style>
  • 效果如下

    在输入框的提示下输入内容,点击添加按钮就会自动添加代办任务,还有完成状态的调整功能,若任务未完成,点击删除是不会有效果的!!!如果第2次添加的内容已经在表中存在,会提示用户,无需重复添加。

在这里插入图片描述

  • 当代办案例邂逅统计完成的个数,则会出现另一个版本的代办案例

    代码如下:

<template>

    <div class="main">
        <h2>代办事项</h2>
        <input id="task" type="text" placeholder="请填写任务" @keyup.enter.exact="add" v-model="content">
        <ul>
            <li v-for="item in display" @mouseover="flag = true" @mouseleave="flag = false">

                <div  id="list">

                    <input type="checkbox" v-model="item.status">
                    <span v-if="!item.status">{{ item.name }}</span>
                    <span v-else> <del> {{ item.name }} </del></span>

                    <div>

                        <i v-show="flag" @click="del(item.id)">X</i>

                    </div>
                </div>
                <hr>
            </li>
        </ul>

        <div id="footer">
            <div id="tips">共有{{ display.length }} {{ which }}条任务 </div>
            <div>
                <button @click="which = '全部'">全部</button>
                <button @click="which = '待办'">待办</button>
                <button @click="which = '已办'">已办</button>
            </div>
        </div>
    </div>
</template>
<script setup>

import { ref, computed } from 'vue';

const flag = ref(false);
const content = ref("");
const which = ref("全部")

const arr = ref([
    { name: '晨练', id: 1, status: false },
    { name: '练书法', id: 2, status: false }
])

const display = computed(() => {
    if (which.value == "全部") {
        return arr.value;
    } else if (which.value == "待办") {
        return arr.value.filter(x => !x.status);
    } else {
        return arr.value.filter(x => x.status);
    }
})

const add = () => {
    let item = { name: content.value, id: arr.value.length + 1, status: false };
    arr.value.push(item);
    content.value = "";
}

const del = (id) => {
    arr.value = arr.value.filter(x => x.id != id)
}

</script>


<style scoped>
.main {

    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

h2 {
    align-self: center
}

ul {
    list-style-type: none;
    padding: 0px;
}

#list {
    display: flex;
    justify-content: space-between;
    min-width: 500px;
}

ul li div {
    min-width: 50px;
    margin: 0px;
}

#task {
    min-width: 500px;
}

#footer {

    display: flex;
    min-width: 500px;
    justify-content: space-between;

}

#tips {
    display: flex;
    align-items: center;
}

#footer button {
    border: 0px;

    background-color: transparent;
}

#footer button:active {
    background-color: aqua;
}
</style>
  • 案例效果如下

    同理根据提示在输入框内输入想要完成的任务,按下Enter键就会添加到列表队伍当中,当鼠标移动到任务条上时右侧会显示一个×,点击x即可删除此条任务!在列表的最后一栏,点击不同状态,会过滤相应的任务,并做出相应的统计。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/708311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

腾讯云对象存储不绑定自定义备案域名不给下载应该如何处理?

从2024年1月1日起&#xff0c;腾讯云对象存储&#xff08;COS&#xff09;将实施新政策&#xff1a;新创建的存储桶不再支持使用path-style域名&#xff08;即存储桶绝对路径&#xff09;。此外&#xff0c;使用默认域名访问的新存储桶将不再支持任意类型文件的预览&#xff0c…

刷题记录(240613)

aliyun0512 1. 小红定义一个数组是好数组&#xff0c;当且仅当所有奇数出现了奇数次&#xff0c;所有偶数出现了偶数次。现在小红拿到了一个数组&#xff0c;她希望取一个该数组的非空子序列(可以不连续)&#xff0c;使得子序列是好数组。你能帮小红求出子序列的方案数吗?由于…

C++面向对象:多态性

多态性 1.概念 多态性是面向对象的程序设计的一个重要特征。在面向对象的方法中一般是这样表述多态的&#xff1a;向不同的对象发送同一个信息&#xff0c;不同的对象在接收时会产生不同的行为。也就是说&#xff0c;每个对象用自己的方式去响应共同的消息。 2.典例 下面这…

MFC动态创建按钮

void CMFCApplication1Dlg::OnBnClickedOk() {for (int i 0; i < 100; i){for (int j 0; j < 100; j){CButton* pButton3 new CButton;pButton[i][j] pButton3;}}CRect rect;GetClientRect(&rect); // 获取对话框客户区的大小rect.top 10; // 设置按钮的位置rec…

Elastic 索引结构-倒排索引

前言 Elastic 在数据库分类中一般被分为全文检索的数据库&#xff0c;那为什么这么区分呢&#xff1f;主要是因为其独特的索引结构 即倒排索引。 倒排索引 倒排索引先将文档中包含的关键字全部提取出来&#xff0c;然后再将关键字与文档的对应关系保存起来&#xff0c;最后再…

19、24年--信息系统工程——安全工程

1、工程概述 信息安全系统工程就是要建造一个信息安全系统,它是整个信息系统工程的一部分,而且最好是业务应用信息系统工程同步进行,主要围绕信息安全内容。 2、安全系统 1)X轴是”安全机制“。安全机制可以理解为提供某些安全服务,利用各种安全技术和技巧,所形成的一个…

06 SpringBoot 配置文件详解-application.yaml

Spring Boot 提供了大量的自动配置&#xff0c;极大地简化了spring 应用的开发过程&#xff0c;当用户创建了一个 Spring Boot 项目后&#xff0c;即使不进行任何配置&#xff0c;该项目也能顺利的运行起来。当然&#xff0c;用户也可以根据自身的需要使用配置文件修改 Spring …

电脑技巧:认识全能绘画软件Krita

目录 一、软件简介 二、软件功能 2.1 强大的画笔引擎 2.2专业色彩管理 2.3 多层编辑与管理 2.4 动画制作 三、软件特点 四、安装说明 五、使用技巧 六、快捷键大全 对于喜欢绘画的朋友来说&#xff0c;Krita 是一款不可多得的绘画工具&#xff0c;它具有开源、免费、…

查分易发成绩教程

马上就要期末考试了&#xff0c;老师们是不是正为家长咨询成绩倍感头痛&#xff1f;在以前老师们发布成绩都是私发给家长或者写在一张小纸条上让学生带回家&#xff0c;麻烦还容易出错&#xff0c;给老师的工作带来不小的压力。不过现在的年轻教师都在使用——查分易小程序&…

开源项目QAnything:全能型本地知识库问答系统

在当今信息爆炸的时代&#xff0c;如何高效地管理和检索大量数据成为了一个重要课题。网易有道推出的开源项目QAnything&#xff0c;正是为了解决这一问题而生。QAnything是一个本地知识库问答系统&#xff0c;支持多种文件格式和数据库&#xff0c;允许用户在离线状态下进行安…

Linux:线程概念 线程控制

Linux&#xff1a;线程概念 & 线程控制 线程概念轻量级进程 LWP页表 线程控制POSIX 线程库 - ptherad线程创建pthread_createpthread_self 线程退出pthread_exitpthread_cancelpthread_joinpthread_detach 线程架构线程与地址空间线程与pthread动态库 线程的优缺点 线程概念…

复分析——第2章——Cauchy定理及其应用(E.M. Stein R. Shakarchi)

第2章 Cauchy定理及其应用 The solution of a large number of problems can be reduced, in the last analysis, to the evaluation of definite integrals; thus mathematicians have been much occupied with this task... However, among many results obtained, a n…

【RabbitMQ】初识 RabbitMQ

初识 RabbitMQ 1.认识 RabbitMQ1.1 介绍1. 2.使用场景1.2.1 推送通知1.2.2 异步任务1.2.3 多平台应用的通信1.2.4 消息延迟1.2.5 远程过程调用 1.3 特性 2.基本概念2.1 生产者、消费者和代理2.2 消息队列2.3 交换机2.3.1 direct2.3.2 topic2.3.3 headers2.3.4 fanout 2.4 绑定2…

基于SpringBoot+VueBBS论坛系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

蓝牙模块的工作原理与电路设计

蓝牙技术是一种短距离无线通信技术&#xff0c;广泛应用于各种智能设备中&#xff0c;如手机、耳机、智能手表等。蓝牙模块作为实现蓝牙通信的核心部件&#xff0c;其工作原理和电路设计对于蓝牙设备的性能和稳定性至关重要。本文将深入解析蓝牙模块的工作原理&#xff0c;包括…

Docker(一)-认识Docker

1.docker理念 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”&#xff0c;也就是通过对应用组件的封装&#xff0c;分发&#xff0c;部署&#xff0c;运行等生命周期的管理&#xff0c;使用户的应用及其运行环境能够做到”…

18.1 HTTP服务器-极简服务器、请求与响应

1. 极简服务器 大道至简。使用Go语言构建世界上最简单的HTTP服务器&#xff0c;仅需四行代码。 标准库的net/http包提供了多种用于创建HTTP服务器的方法&#xff0c;其中包括&#xff1a; http.HandleFunc("/", rootHandler) 第一参数&#xff1a;访问的url 第二…

Elasticsearch搜索引擎(高级篇)

3.1 查询语法 | 《ElasticSearch入门到实战》电子书 (chaosopen.cn) day09-Elasticsearch02 - 飞书云文档 (feishu.cn) 目录 第一章 DSL查询 1.1 基本语法 1.2 叶子查询 全文检索查询 精确查询 1.3 复合查询 算分函数查询 bool查询 1.4 排序 1.5 分页 基础分页 深度分…

数据可视化:Seaborn

安装Seaborn 进入虚拟环境&#xff0c;在终端中键入 pip install seaborn 即可安装。 初步使用Seaborn 在使用seaborn之前&#xff0c;我们先了解一下seaborn是什么&#xff0c;seaborn是以matplotlib为底层的更简便的python第三方库&#xff0c;它可以更快捷地去设置图形的一…

Web应用安全测试-防护功能缺失

Web应用安全测试-防护功能缺失 1、Cookie属性问题 漏洞描述&#xff1a; Cookie属性缺乏相关的安全属性&#xff0c;如Secure属性、HttpOnly属性、Domain属性、Path属性、Expires属性等。 测试方法&#xff1a; 通过用web扫描工具进行对网站的扫描&#xff0c;如果存在相关…