Vue2 入门指南15:从零搭建一个简单的 Todo 应用

在本篇文章中,我们将一起从零开始构建一个简单的 Todo 应用。这将帮助你更好地理解 Vue 的基本概念和如何使用 Vue 来管理用户界面的交互和数据。

Todo 应用是前端开发中常见的入门项目,它可以帮助我们掌握 Vue 的核心特性,如数据绑定、事件处理、组件化开发等。


一、准备工作

首先,确保你已经安装了 Node.js 和 Vue CLI。如果你还没有安装,可以按照以下步骤进行安装:

  1. 下载并安装 Node.js

  2. 安装 Vue CLI:

    bash 复制代码
    npm install -g @vue/cli

安装完成后,我们可以使用 Vue CLI 创建一个新的项目:

bash 复制代码
vue create todo-app

在创建过程中,选择默认的配置选项,Vue CLI 会为你设置好所有的基础配置。创建完成后,进入项目文件夹并启动开发服务器:

bash 复制代码
cd todo-app
npm run serve

打开浏览器并访问 http://localhost:8080,你会看到 Vue 的默认欢迎页面。


二、构建 Todo 应用

接下来,我们将按照以下步骤逐步构建我们的 Todo 应用。

1. 设计应用结构

我们将构建一个简单的 Todo 应用,包含以下功能:

  • 输入框:用于输入新的 Todo 项。
  • Todo 列表:显示所有的 Todo 项。
  • 删除按钮:删除已完成的 Todo 项。
  • 标记已完成:点击 Todo 项来标记它为已完成。

在 Vue 中,我们将通过一个单一的组件来完成这些功能。我们会将整个应用的模板、逻辑和样式都写在一个文件中。

2. 修改 App.vue

首先,打开 src/App.vue 文件,并将它的内容替换为以下代码:

vue 复制代码
<template>
  <div id="app">
    <h1>Todo 应用</h1>
    <input v-model="newTodo" @keyup.enter="addTodo" placeholder="输入新的任务" />
    <ul>
      <li v-for="(todo, index) in todos" :key="index" :class="{ completed: todo.completed }">
        <span @click="toggleComplete(todo)">{{ todo.text }}</span>
        <button @click="removeTodo(index)">删除</button>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'App',
  data() {
    return {
      newTodo: '',
      todos: [
        { text: '学习 Vue.js', completed: false },
        { text: '做练习题', completed: false },
        { text: '查看项目文档', completed: false }
      ]
    };
  },
  methods: {
    addTodo() {
      if (this.newTodo.trim()) {
        this.todos.push({ text: this.newTodo.trim(), completed: false });
        this.newTodo = '';
      }
    },
    removeTodo(index) {
      this.todos.splice(index, 1);
    },
    toggleComplete(todo) {
      todo.completed = !todo.completed;
    }
  }
};
</script>

<style scoped>
#app {
  text-align: center;
}

input {
  padding: 10px;
  margin-bottom: 20px;
}

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

li {
  padding: 10px;
  margin: 5px 0;
  background-color: #f4f4f4;
  cursor: pointer;
}

li.completed {
  text-decoration: line-through;
  color: #aaa;
}

button {
  background-color: red;
  color: white;
  border: none;
  padding: 5px 10px;
  cursor: pointer;
}

button:hover {
  background-color: darkred;
}
</style>

三、代码解析

1. 模板部分

vue 复制代码
<template>
  <div id="app">
    <h1>Todo 应用</h1>
    <input v-model="newTodo" @keyup.enter="addTodo" placeholder="输入新的任务" />
    <ul>
      <li v-for="(todo, index) in todos" :key="index" :class="{ completed: todo.completed }">
        <span @click="toggleComplete(todo)">{{ todo.text }}</span>
        <button @click="removeTodo(index)">删除</button>
      </li>
    </ul>
  </div>
</template>
  • v-model="newTodo":将输入框的值绑定到 newTodo 数据属性。
  • @keyup.enter="addTodo":当用户按下 Enter 键时,调用 addTodo 方法添加新的 Todo 项。
  • v-for="(todo, index) in todos":遍历 todos 数组,生成每个 Todo 项。
  • :class="{ completed: todo.completed }":当 Todo 项被标记为已完成时,应用 completed 类来为其添加删除线样式。
  • @click="toggleComplete(todo)":点击 Todo 项时切换其完成状态。
  • @click="removeTodo(index)":点击删除按钮时删除该 Todo 项。

2. 脚本部分

javascript 复制代码
<script>
export default {
  name: 'App',
  data() {
    return {
      newTodo: '',
      todos: [
        { text: '学习 Vue.js', completed: false },
        { text: '做练习题', completed: false },
        { text: '查看项目文档', completed: false }
      ]
    };
  },
  methods: {
    addTodo() {
      if (this.newTodo.trim()) {
        this.todos.push({ text: this.newTodo.trim(), completed: false });
        this.newTodo = '';
      }
    },
    removeTodo(index) {
      this.todos.splice(index, 1);
    },
    toggleComplete(todo) {
      todo.completed = !todo.completed;
    }
  }
};
</script>
  • newTodo 用于存储输入框的值,todos 用于存储所有的 Todo 项。
  • addTodo 方法用于添加新的 Todo 项。它会检查输入框是否为空,如果不为空,则将新的 Todo 项添加到 todos 数组中。
  • removeTodo 方法用于删除指定的 Todo 项。
  • toggleComplete 方法用于切换 Todo 项的完成状态。

3. 样式部分

css 复制代码
<style scoped>
#app {
  text-align: center;
}

input {
  padding: 10px;
  margin-bottom: 20px;
}

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

li {
  padding: 10px;
  margin: 5px 0;
  background-color: #f4f4f4;
  cursor: pointer;
}

li.completed {
  text-decoration: line-through;
  color: #aaa;
}

button {
  background-color: red;
  color: white;
  border: none;
  padding: 5px 10px;
  cursor: pointer;
}

button:hover {
  background-color: darkred;
}
</style>
  • scoped 样式仅对当前组件生效,不会影响其他组件。
  • 我们为每个 Todo 项添加了背景颜色,并且已完成的 Todo 项会有删除线效果。

四、总结

通过本篇文章的学习,你应该已经能够从零开始搭建一个简单的 Todo 应用,并掌握了 Vue 的一些核心概念和技巧:

  • 使用 v-model 双向绑定输入框的值。
  • 使用 v-for 遍历数组并渲染列表。
  • 使用事件处理方法实现交互(添加、删除和标记完成)。
  • 使用 Vue 的响应式机制自动更新 UI。

这个简单的 Todo 应用是一个非常好的 Vue 入门项目,能够帮助你理解 Vue 的基本使用方式,并为更复杂的项目打下基础。随着你对 Vue 的深入了解,你将能实现更加丰富和复杂的功能。

相关推荐
customer0817 分钟前
【开源免费】基于SpringBoot+Vue.JS社区养老服务平台(JAVA毕业设计)
java·vue.js·spring boot·spring cloud·开源
noravinsc22 分钟前
vue2 definecomponent is not defined
前端·javascript·vue.js
工业互联网专业1 小时前
基于springboot+vue的游戏创意工坊与推广平台的设计与实现
java·vue.js·spring boot·毕业设计·源码·课程设计·游戏创意工坊与推广平台
小王不会写code2 小时前
vue-cli-service权限不足(Linux运行vue)
vue.js
Gazer_S2 小时前
【CodePen实战:撤销重做功能全记录】
前端·javascript·vue.js
眸笑丶2 小时前
VS2022中.Net Api + Vue 从创建到发布到IIS
前端·vue.js·.net
scyylwj21747787972 小时前
Vue基础入门
前端·javascript·vue.js
无光末阳3 小时前
echarts 双Y轴,左右刻线对齐,封装
前端·vue.js
独莫子凡5 小时前
vue项目 Axios创建拦截器
前端·javascript·vue.js