首页 > 其他分享 >使用Vue.js构建待办事项应用:从零到上线

使用Vue.js构建待办事项应用:从零到上线

时间:2024-12-16 13:30:57浏览次数:6  
标签:index Vue vue js 任务 待办 组件 todos

前言

       Vue.js 是一个渐进式 JavaScript 框架,旨在构建用户界面。它简洁易用,支持组件化开发,非常适合中小型项目和单页面应用。本文将通过构建一个待办事项应用,展示如何使用 Vue.js 开发前端项目。我们会一步步讲解项目的核心功能,并最终将项目部署上线。

项目背景

       待办事项应用是前端开发中常见的练习项目,旨在帮助用户记录和管理日常任务。本项目将实现如下功能:

  • 添加待办事项
  • 标记任务为完成
  • 删除任务
  • 基于本地存储保存任务状态

       通过这些功能,初学者可以快速掌握 Vue.js 的基本用法以及如何与浏览器的本地存储交互。

技术选型

  • Vue.js 3:用于构建用户界面,使用组合式 API(Composition API)进行组件开发。
  • Vue CLI:用于快速创建 Vue 项目,并进行本地开发与调试。
  • LocalStorage:用于持久化存储任务,避免页面刷新后数据丢失。

项目结构

vue-todo-app
│
├── public/           # 公共静态资源
├── src/              # 源代码目录
│   ├── components/   # Vue 组件
│   ├── App.vue       # 主应用组件
│   ├── main.js       # 入口文件
│
└── package.json      # 项目信息

搭建项目

       首先,我们使用 Vue CLI 创建一个新的 Vue 项目:

vue create vue-todo-app

       选择默认的 Vue 3 模板,然后进入项目目录并启动开发服务器:

cd vue-todo-app
npm run serve

       这将启动本地开发服务器,并在浏览器中打开 localhost:8080,你将看到一个基本的 Vue 项目框架。

核心代码

任务列表组件

       我们首先创建一个 TodoList 组件,用于展示待办事项列表。该组件负责显示任务,并允许用户标记任务为完成或删除任务。

<!-- src/components/TodoList.vue -->
<template>
  <div class="todo-list">
    <h2>My To-Do List</h2>
    <ul>
      <li v-for="(todo, index) in todos" :key="index">
        <span :class="{ completed: todo.completed }">{{ todo.text }}</span>
        <button @click="toggleComplete(index)">✔</button>
        <button @click="removeTask(index)">✖</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    todos: Array
  },
  methods: {
    toggleComplete(index) {
      this.$emit('toggle-complete', index);
    },
    removeTask(index) {
      this.$emit('remove-task', index);
    }
  }
};
</script>

<style scoped>
.completed {
  text-decoration: line-through;
}
</style>

添加任务组件

       接下来,我们创建一个 AddTask 组件,用户可以通过该组件添加新的待办事项。

<!-- src/components/AddTask.vue -->
<template>
  <div class="add-task">
    <input v-model="newTask" @keyup.enter="addTask" placeholder="What do you need to do?" />
    <button @click="addTask">Add</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      newTask: ''
    };
  },
  methods: {
    addTask() {
      if (this.newTask.trim()) {
        this.$emit('add-task', this.newTask);
        this.newTask = '';
      }
    }
  }
};
</script>

<style scoped>
.add-task {
  margin-bottom: 20px;
}
</style>

组合组件与逻辑

       在 App.vue 中,我们将 TodoListAddTask 组件组合在一起,并实现添加任务、标记任务完成和删除任务的逻辑。同时,我们使用 LocalStorage 来存储任务列表。

<!-- src/App.vue -->
<template>
  <div id="app">
    <h1>Vue To-Do List</h1>
    <AddTask @add-task="addTask" />
    <TodoList :todos="todos" @toggle-complete="toggleComplete" @remove-task="removeTask" />
  </div>
</template>

<script>
import AddTask from './components/AddTask.vue';
import TodoList from './components/TodoList.vue';

export default {
  components: {
    AddTask,
    TodoList
  },
  data() {
    return {
      todos: []
    };
  },
  methods: {
    addTask(task) {
      this.todos.push({ text: task, completed: false });
      this.saveTodos();
    },
    toggleComplete(index) {
      this.todos[index].completed = !this.todos[index].completed;
      this.saveTodos();
    },
    removeTask(index) {
      this.todos.splice(index, 1);
      this.saveTodos();
    },
    saveTodos() {
      localStorage.setItem('todos', JSON.stringify(this.todos));
    },
    loadTodos() {
      const savedTodos = localStorage.getItem('todos');
      if (savedTodos) {
        this.todos = JSON.parse(savedTodos);
      }
    }
  },
  mounted() {
    this.loadTodos();
  }
};
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  text-align: center;
  margin-top: 60px;
}
</style>

说明

  • App.vue 是主应用组件,负责将所有逻辑和组件结合在一起。
  • AddTask 组件用于添加新任务,当用户点击按钮或按下回车时,新的任务将通过事件传递给父组件 App.vue
  • TodoList 组件负责显示任务列表,并且可以通过事件触发标记任务完成或删除任务。

本地存储功能

       通过 LocalStorage 我们可以将任务持久化保存。当用户刷新页面时,任务不会丢失。

saveTodos() {
  localStorage.setItem('todos', JSON.stringify(this.todos));
},
loadTodos() {
  const savedTodos = localStorage.getItem('todos');
  if (savedTodos) {
    this.todos = JSON.parse(savedTodos);
  }
}

       saveTodos 方法在任务列表发生变化时被调用,将当前任务列表保存到 LocalStorage 中。loadTodos 方法则在应用加载时读取并恢复任务列表。

部署上线

       开发完成后,我们可以通过 Vue CLI 将项目打包并部署到静态服务器上。

       首先,运行以下命令打包项目:

npm run build

       这将在 dist/ 目录中生成优化后的静态文件。接下来,可以将这些文件上传到 GitHub Pages、Netlify 或 Vercel 等平台进行托管。

项目总结

       通过这个项目,我们实现了一个功能简单但实用的待办事项应用。项目中展示了 Vue.js 的核心概念,如组件化开发、数据绑定和事件处理。同时,通过使用本地存储,我们实现了任务的持久化,增强了用户体验。这个项目可以进一步扩展,例如添加任务分类、设置优先级、任务搜索和筛选功能等。

标签:index,Vue,vue,js,任务,待办,组件,todos
From: https://blog.csdn.net/byby0325_/article/details/144506551

相关文章

  • node.js毕设基于超市管理系统的设计与实现论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于超市管理系统的设计与实现这一问题的研究,现有研究主要以超市管理系统中的部分功能开发或者整体框架的理论构建为主。专门针对包含用户、商品分类、......
  • node.js毕设法院卷宗管理信息系统 论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于法院卷宗管理信息系统的研究,现有研究主要集中在法院的审判流程管理、司法公开等方面,专门针对法院卷宗管理信息系统的全面研究较少。在国内外,部分法......
  • 小区失物招领系统|Java|SSM|JSP| 
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • 旅游资源系统|Java|SSM|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetom......
  • 卫生人员评审专家申报系统|Java|SSM|VUE| 前后端分离
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • 社区生活超市系统|Java|SSM|JSP| 
                 【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apachetomcat......
  • [免费]SpringBoot+Vue校园社团管理系统(优质版)【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue校园社团管理系统(优质版),分享下哈。项目视频演示【免费】SpringBoot+Vue校园社团管理系统(优质版)Java毕业设计_哔哩哔哩_bilibili项目介绍随着信息技术的迅速发展,校园管理系统的数字化和智能化成为高校信息化......
  • node.js毕设大学生社团管理系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于大学生社团管理系统的研究,现有研究多侧重于社团活动组织等方面,专门针对包含学生成绩等多功能的大学生社团管理系统的研究较少。在国内外,社团管理相......
  • Ant Design Vue使用a-table动态设置columns
    一、需求一个页面显示多个列表数据,需要改变表头columns参数等二、问题1、设置columns之后,因为a-table中的columns、data-source是响应式的,所以可以看到切换渲染是可以正常完成的,数据、表头都是正常的。2、由于列表数据除了直接取过来显示的之外,还有部分数据需要根据值进行判断......
  • 《Vue进阶教程》第十二课:实现一对多
      往期内容:《Vue进阶教程》第二课:为什么提出组合式API《Vue进阶教程》第三课:Vue响应式原理《Vue进阶教程》第四课:reactive()函数详解《Vue进阶教程》第五课:ref()函数详解(重点)《Vue进阶教程》第六课:computed()函数详解(上)《Vue进阶教程》第七课:computed()函数详解(下......