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

news2025/2/27 0:50:09

代办事件案例

  • 该案例,综合了前面所学的知识,列入点击事件绑定,双向绑定,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即可删除此条任务!在列表的最后一栏,点击不同状态,会过滤相应的任务,并做出相应的统计。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络重要知识点

OSI 七层模型 是国际标准化组织提出的一个网络分层模型。 TCP/IP 四层模型 是目前被广泛采用的一种模型,我们可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本&#xff0c;由以下 4 层组成&#xff1a; 应用层传输层网络层网络接口层 复杂的系统需要分层&#xff0c;因为每…

【Pandas】已完美解决:AttributeError: ‘DataFrame‘ object has no attribute ‘ix‘

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例&#xff08;结合实战场景&#xff09;五、注意事项 一、问题背景 在Pandas的早期版本中&#xff0c;ix 是一个方便的索引器&#xff0c;允许用户通过标签和整数位置来索引DataFrame的行和列。然而&a…

Go基础编程 - 05 - 数组与切片

目录 1. 数组2. 切片2.1. slice 声明、初始化2.2. slice 操作2.3. append() 追加切片、扩容2.4. 字符串和切片 3. Copy4. Array、Slice 内存布局 上一篇&#xff1a;基本类型、常量和变量 下一篇&#xff1a;指针 1. 数组 数组是同一种类型固定长度的序列&#xff08;有长度、…

新版eclipseSpringToolSuite4 get set方法自动生成注释(适用2019-03之后版本)

今天分享一个新版本eclipse 自动生成getter/setter文档注释的方法&#xff0c;看一下效果图 public class Test {//姓名private String name;/** * 获取 姓名 * return name 姓名 */public String getName() {return name;}/** * 设置 姓名 * param name 姓名 */public void …

frp55版本如何配置泛域名

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 之前配置的好好的frp&#xff0c;结果到用的时候不能用了&#xff0c;直接影响了我早上的一堆rss订阅源不能用&#xff0c;群里的新闻简报也没有正常推送&#xff0c;今天又翻出来捋…

SpringCloud总结(springcloud alibaba)

目录 版本说明&#xff08;很重要&#xff09; springcloud alibaba对应组件版本说明 简述 spring cloud albaba 几大模块 周会讨论 - spring cloud alibaba每周都会有周会讨论,社区活跃 spring cloud alibaba官网 注册配置中心 简单介绍 nacos 步骤 示例代码 依赖…

C# WinForm —— 35 StatusStrip 介绍

1. 简介 状态栏 StatusStrip&#xff0c;默认在软件的最下方&#xff0c;用于显示系统时间、版本、进度条、账号、角色信息、操作位置信息等 可以在状态栏中添加的控件类型有&#xff1a;StatusLabel、ProgressBar、DropDownButton、SplitButton 2. 属性 属性解释(Name)控…

端午后的第一单cisa

需要的老板快来联系

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第41课-动态添加3D对象

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第41课-动态添加3D对象 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…

实现流程自动化的警务反诈RPA:通过智能化技术提升警方反诈骗能力

电信诈骗一直以来都是公安机关重点打击的犯罪行为&#xff0c;随着信息技术的更新迭代&#xff0c;新型诈骗手段也层出不穷&#xff0c;传统的反诈手段已无法满足办案所需。在这一背景下&#xff0c;公安机关利用科技革命带来的契机&#xff0c;坚持以科技为反诈工作赋能&#…

鹧鸪云光伏业务管理系统,助力企业数智化发展

在当今数字化浪潮席卷全球的背景下&#xff0c;光伏行业作为绿色能源的重要组成部分&#xff0c;其业务管理的数智化转型显得尤为重要。鹧鸪云光伏业务管理系统&#xff0c;以其强大的功能和卓越的性能&#xff0c;正成为企业实现数智化转型的重要助力。 作为光伏行业的领军软…

LeetCode 119.杨辉三角 II

1.题目要求如图所示: 示例 1:输入: rowIndex 3 输出: [1,3,3,1]示例 2:输入: rowIndex 0 输出: [1]示例 3:输入: rowIndex 1 输出: [1,1]先用malloc函数创造一个二维数组&#xff0c;变成杨辉三角&#xff0c;然后再用一维数组找到所指的那一行: /*** Note: The returned…

循环订单激励:打造企业增长新引擎

循环订单激励&#xff1a;打造企业增长新引擎 在当今竞争激烈的商业环境中&#xff0c;许多企业都在寻求独特而高效的营销策略以吸引并留住客户。今天&#xff0c;我要为您介绍的是一种名为“循环订单激励”的新颖模式&#xff0c;它不仅能提升客户参与度&#xff0c;还能为企…

Python实现逻辑回归与判别分析--西瓜数据集

数据 数据data内容如下&#xff1a; 读取数据&#xff1a; import numpy as np import pandas as pd data pd.read_excel(D:/files/data.xlsx) 将汉字转化为01变量&#xff1a; label [] for i in data[好瓜]:l np.where(i 是,1,0)label.append(int(l)) data[label] lab…

南师大GIS专业2024排名NO.1!!!

南师大GIS 666 学科专业实力666&#xff0c;研究方向多多多&#xff01; 有学术方向有开发应用方向&#xff0c; 有GIS&#xff08;建模、数字地形、基础理论和三维GIS等&#xff09;、 有Cartography &#xff08;叙事地图、动态地图、地图风格迁移等&#…

线性规划问题——单纯形算法

第一步&#xff1a;化“约束标准型” 在每个等式约束中至少有一个变量的系数为正&#xff0c;且这个变量只在该约束中出现。在每个约束方程中选择一个这样的变量称为基本变量。 剩下变量称为非基本变量。 一个简单的栗子 上图是一个约束标准型线性规划的例子。 等式1&#x…

【总线】AMBA总线架构的发展历程

目录 引言 发展历程 第一代AMBA&#xff08;AMBA 1&#xff09; 第二代AMBA&#xff08;AMBA 2&#xff09; 第三代AMBA&#xff08;AMBA 3&#xff09; 第四代AMBA&#xff08;AMBA 4&#xff09; 第五代AMBA&#xff08;AMBA 5&#xff09; AMBA协议简介 ASB&#x…

Capto2024软件怎么下载安装? 【详细安装图文教程】

Capto 2024是一款专为Mac用户设计的屏幕录制编辑软件。无论是想要制作教育视频、工作演示、游戏录制&#xff0c;还是进行简单的屏幕捕捉&#xff0c;Capto 2024都能满足您的需求。接下来&#xff0c;我将详细介绍其主要功能、特点以及使用场景&#xff0c;并为您评价这款软件。…

linux执行ifconfig命令ens33没有显示ip地址解决方法

1.右键启动VMware DHCP和NAT这两个服务 2.执行reboot命令&#xff0c;重启linux。然后再执行ifconfig命令,可以看到inet了&#xff0c;就是ip。xshell也可以连接到主机了。

为什么说这个方向,是网工人最大的机会

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友 都说各行各业早就没有了什么黄金时机&#xff0c;IT行业被称为含金量最高的行业之一&#xff0c;也难逃降薪裁员…