vue3-03 todo-新增任务

news2024/9/22 23:25:50

步骤:

  1. todoStorage.js:定义获取任务列表的方法、将任务存储到localStorage的方法、后续需要用到的获取随机id的方法。
  2. useTodoList.js:用一个响应式变量todosRef接收任务列表的数据;使用watchEffect方法将新增的任务保存到localStorage。最后再将页面需要的todosRef返回出去。
  3. useNewTodo.js:用于任务的新增。首先需要用一个响应式变量newTodoRef(在页面中需要通过v-model来绑定)来存储页面新增的任务标题;其次声明一个addTodo方法(在页面中通过@keyup.enter事件)用于新增任务的操作,在生成一个任务后,需要将其添加到任务列表中,而任务列表是用useTodoList.js文件的todosRef来存储的,因此需要在App.vue页面中,将todosRef传给useNewTodo;最后将需要的 newTodoRef和addTodo返回出去。

在这里插入图片描述

App.vue
<template>
  <link rel="stylesheet" href="./style.css" />
  <div id="app">
    <section class="todoapp">
      <header class="header">
        <h1>todos</h1>
        <input class="new-todo" autofocus="" autocomplete="off" placeholder="What needs to be done?" v-model="newTodoRef"
          @keyup.enter="addTodo" />
      </header>
      <section class="main">
        <input id="toggle-all" class="toggle-all" type="checkbox" />
        <label for="toggle-all">Mark all as complete</label>
        <ul class="todo-list">
          <li class="todo">
            <div class="view">
              <input class="toggle" type="checkbox" />
              <label>学习composition api</label>
              <button class="destroy"></button>
            </div>
            <input class="edit" type="text" />
          </li>
          <li class="todo">
            <div class="view">
              <input class="toggle" type="checkbox" />
              <label>投递50封简历</label>
              <button class="destroy"></button>
            </div>
            <input class="edit" type="text" />
          </li>
          <li class="todo">
            <div class="view">
              <input class="toggle" type="checkbox" />
              <label>上午10:30 参加面试</label>
              <button class="destroy"></button>
            </div>
            <input class="edit" type="text" />
          </li>
        </ul>
      </section>
      <footer class="footer">
        <span class="todo-count">
          <strong>3</strong>
          <span>items left</span>
        </span>
        <ul class="filters">
          <li><a href="#/all" class="selected">All</a></li>
          <li><a href="#/active" class="">Active</a></li>
          <li><a href="#/completed" class="">Completed</a></li>
        </ul>
        <button class="clear-completed" style="display: none">
          Clear completed
        </button>
      </footer>
    </section>
  </div>
</template>

<script>
import useTodoList from "./composition/useTodoList"
import useNewTodo from "./composition/useNewTodo"
export default {
  setup() {
    const { todosRef } = useTodoList();
    return {
      todosRef,
      ...useNewTodo(todosRef)
    }
  }
}
</script>
todoList.js
const LOCAL_KEY = 'todomvc';
/**
 * 生成一个随机id 时间戳+四位随机数
 */
export function generateId() {
    return Date.now() + Math.random().toString(16).slice(2,4);
}
/**
 * 获取所有的任务
 */
export function fetch() {
    const resultArr = localStorage.getItem(LOCAL_KEY);
    if (resultArr) {
        // 通过 JSON.parse() 方法将 resultArr 变量中的数据解析为 JavaScript 对象或数组。这是因为本地存储中的数据通常以字符串的形式保存,而在使用之前需要将其转换为 JavaScript 对象或数组。
        return JSON.parse(resultArr);
    }
    // 否则
    return [];
}

/**
 * 保存任务
 * @param {*} todos 任务列表
 */
export function save(todos) {
    localStorage.setItem(LOCAL_KEY, JSON.stringify(todos));
}
useTodoList.js
// watchEffect 函数用于创建一个响应式的副作用函数。它的作用是在其依赖的响应式数据发生变化时自动运行副作用函数。
import { ref,watchEffect } from "vue";
import * as todoStorage from "../util/todoStorage.js"
export default function useTodoList() {
    const todosRef = ref(todoStorage.fetch());
    window.todosRef = todosRef; //用于测试
    watchEffect(() => {
        todoStorage.save(todosRef.value); //当其依赖的响应式数据todoRef.value发生变化的就会执行save。
    })
    return{
        todosRef
    }
}
useNewtodo.js
import { ref} from "vue";
import {generateId} from "../util/todoStorage";
export default function useNewTodo(todosRef) {
    const newTodoRef = ref(""); //新增任务的标题
    // 新增一个任务
    const addTodo = () => {
        // 新增一个任务
        const value = newTodoRef.value && newTodoRef.value.trim();
        console.log(value,'1111');
        if (!value) {
            return;
        }
        // 生成一个任务,并将其加入到任务列表中
        const todo = {
            id: generateId(),
            title: value,
            completed: false, //任务是否完成
        }
        console.log(todo,'todo');
        todosRef.value.push(todo);
        newTodoRef.value ="";
    }
    return {
        newTodoRef,
        addTodo,
    }
}

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

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

相关文章

2023/7/16周报

摘要 论文阅读 1、题目和现有问题 2、工作流程 3、图神经网络模块 4、注意力网络 5、实验结果和分析 深度学习 1、GNN和GRU的融合 2、相关公式推导 总结 摘要 本周在论文阅读上&#xff0c;对基于图神经网络和改进自注意网络的会话推荐的论文进行了学习&#xff0c;…

i.MX6ULL(十六) linux 设备驱动

一 简介 Linux设备驱动是指驱动Linux内核与硬件设备进行通信的软件模块。设备驱动通常分为两类&#xff1a;字符设备驱动和块设备驱动。 设备驱动的主要功能包括&#xff1a; 设备初始化&#xff1a;在系统启动时&#xff0c;设备驱动需要初始化相应的硬件设备&#xff0c;设…

人工智能、机器学习、自然语言处理、深度学习等有啥本质的区别?

大众媒体赋予这些术语的含义通常与机器学习科学家和工程师的理解有所出入。因此&#xff0c;当我们使用这些术语时&#xff0c;给出准确的定义很重要&#xff0c;其关系韦恩图如图1.2所示。 图1.2 自然语言处理、人工智能、机器学习和深度学习等术语的关系韦恩图 1 人工智能 …

企业使用CRM后的三大提升

数字化转型是企业发展的重要决策&#xff0c;为此&#xff0c;很多企业使用CRM客户管理系统管理客户数据、优化业务流程&#xff0c;直面数字化浪潮。那么&#xff0c;使用CRM系统后&#xff0c;企业会有哪些变化呢&#xff1f; 一、提升客户体验 使用CRM系统后&#xff0c;企…

第二周周报

PCA PCA 是一种流行的统计技术&#xff0c;用于识别数据集中最重要的特征或模式并将其转换为较低维的表示形式。本报告将涵盖PCA的基本原理、其优点。 步骤 主成分分析是一种数学技术&#xff0c;可降低数据集的维数&#xff0c;同时保留尽可能多的信息。它通过查找主成分来…

Redis集群(Cluster和Codis)

1.为什么使用集群&#xff1f; 当我们遇到一个大数据量存储情况时&#xff0c;有两种解决方案&#xff1a; 纵向扩容&#xff1a;升级单个redis实例的配置&#xff0c;包括增加内存容量、磁盘容量&#xff0c;以及使用更高的cpu配置。 纵向扩容&#xff1a;简单直接。也存在一些…

98英寸带来加倍沉浸享受,三星Q80Z新品呈现大有不同的精彩

作者 | 曾响铃 文 | 响铃说 在过去几年&#xff0c;家电行业可以说是负重前行。在经历2022年整年寒冬后&#xff0c;2023年的彩电市场能否迎来一场翻身仗&#xff1f;这是年初被业内讨论最多的话题。 目前2023年已经过半&#xff0c;据奥维云网数据显示&#xff0c;2023年一…

InsCode Stable Diffusion 美图活动一期——即刻体验!来自 CSDN 的 SD 模型

文章目录 &#x1f525;关于活动&#x1f4cb;前言&#x1f3af;什么是 Stable Diffusion&#x1f9e9;Stable Diffusion 与其他 AI 艺术生成器有什么区别&#xff1f; &#x1f3af;开始体验 InsCode Stable Diffusion&#x1f3af;试用 SD 模型生成优质人物好图&#x1f9e9;…

内存池是什么原理?|内存池简易模拟实现|为学习高并发内存池tcmalloc做准备

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 这两个都是博主在学习Linux操作系统过程中的记录&#xff0c;希望对大家的学习有帮助&#xff01; 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

在Linux系统中如何搭建Apache服务

在Linux系统中如何搭建Apache服务 Apache服务是一种开源的、跨平台的Web服务器软件&#xff0c;它的作用是提供网页内容给用户的Web浏览器。具体来说&#xff0c;Apache服务有以下几个主要的作用&#xff1a; 1.Web服务器&#xff1a;Apache是一款功能强大且广泛使用的Web服务…

54、Mysql索引的数据结构,各自优劣

Mysql索引的数据结构&#xff0c;各自优劣 索引的数据结构和具体存储引擎的实现有关在MySQL中使用较多的索引有Hash索引&#xff0c;B树索引等InnoDB存储引擎的默认索引实现为: B树索引。对于哈希索引来说&#xff0c;底层的数据结构就是哈希表&#xff0c;因此在绝大多数需求…

C++编程(三)—— C++11

文章目录 绑定器和函数对象函数对象绑定器lambda表达式 关键词与语法autonullptr右值引用 智能指针容器set和mapunordered_set和unordered_map数组链表 语言级别支持的多线程编程thread子线程如何结束主线程如何处理子线程线程间的互斥线程的同步通信机制&#xff08;条件变量&…

Windows Cluster 分布式算法

在分布式系统中&#xff0c;都需要解决分布式一致性问题。那么&#xff0c;在Windows 集群中&#xff0c;使用了什么算法来保证集群的一致性呢——Paxos。Windows Server 故障转移集群 (WSFC) 使用 Paxos 算法在整个系统中同步更改。通过记录 Paxos Tag 值并保留历史记录&#…

连锁门店如何搭建B2B2C多用户商城系统?

现在很多的线下店铺都开始慢慢的转型线上了&#xff0c;想线上线下相结合&#xff0c;但是最近很多的商家都在问什么样的B2B2C商城系统开发适合线下店铺呢?这个问题今天加速度jsudo小编给大家一起整理如下&#xff0c;相信商家看完后就知道如何选择一款合适的商城系统了。 一、…

【C语言】求序列前N项和

问题描述 输入一个正整数n&#xff0c;输出2/13/25/38/5…的前n项之和&#xff08;该序列从第2项起&#xff0c;每一项的分子是前一项分子与分母的和&#xff0c;分母是前一项的分子&#xff09;&#xff0c;保留2位小数。试编写相应程序。 代码实现 #include<stdio.h>…

spring-14优化性能

原始Junit测试Spring的问题 这里的&#xff1a;第一行代码获得应用上下文对象&#xff0c;第二行代码获得你那个对象 2、原先测试找junit&#xff0c;现在测试找spring&#xff0c;然后再找&#xff0c;junit&#xff0c;告诉我配置文件是什么&#xff0c;然后注入测试对象&am…

LeetCode 172.阶乘后的零

基础方法就是暴力解&#xff0c;其次是数学归纳。 具体思路如下&#xff1a;&#xff08;copy大佬的&#xff09; 耐心看完&#xff01; 代码如下&#xff1a; #include <iostream> #include <vector> #include <cmath> #include <algorithm> #incl…

Android GridPager实战,从RecyclerView to ViewPager

这个简单的的案例展示了如何从RecyclerView to ViewPager&#xff0c;以网上的公开图片为样例。 安卓开发中从RecyclerView 到 ViewPager demo运行结果demo项目工程目录结构关键代码 MainActivity关键代码GridFragment关键代码ImageFragment关键代码ImagePagerFragment关键布局…

关于示波器引入50HZ工频干扰的解释

前几天&#xff0c;小白在实验室工作时&#xff0c;听到同事抱怨示波器有问题。上前查看&#xff0c;才知道&#xff0c;小白的那位同事在测量信号波形时&#xff0c;实际与理想相差甚远。于是乎&#xff0c;在探头什么也不接的情况下&#xff0c;发现示波器本身也存在波形信号…

2022Robocom国赛-u2 女王的大敕令

副本是游戏里的一个特色玩法&#xff0c;主要为玩家带来装备、道具、游戏资源的产出&#xff0c;满足玩家的游戏进程。 在 MMORPG《最终幻想14》里&#xff0c;有一个攻略人数最大达到 48 人的副本“零式贡希尔德神庙”&#xff0c;其中守关 BOSS “天佑女王”有一个很有趣的技…