使用Vue3创建一个基础的Todo列表应用,包含添加、删除和标记完成任务的功能

在前端开发领域,面试者往往会被要求展示他们对现代框架的实际应用能力。Vue.js,作为一个渐进式JavaScript框架,是前端开发中相当流行的选择。在本篇博客中,我们将共同探索如何使用Vue3创建一个基础的Todo列表应用,并实现任务的添加、删除和标记完成的功能。这不仅可以帮助你更好地理解Vue.js的核心概念,还能为你在面试中展示实际编码能力提供一个优秀的项目示例。

一、项目初始化

首先,我们需要确保已经安装了Node.js和npm(或者yarn)。然后使用Vue CLI进行项目的初始化。

npm install -g @vue/cli
vue create todo-app
cd todo-app

二、项目结构

项目创建完成后,你会看到类似如下的目录结构:

.
├── node_modules
├── public
├── src
│   ├── assets
│   ├── components
│   ├── App.vue
│   ├── main.js
├── .gitignore
├── babel.config.js
├── package-lock.json
├── package.json
├── README.md
└── vue.config.js

三、编写代码

1. App.vue 文件

App.vue 是整个Vue应用的核心组件,我们将在这里定义基础的模板和逻辑。

<template>
  <div id="app">
    <h1>Todo List</h1>
    <todo-input @add-task="addTask"></todo-input>
    <todo-list 
      :tasks="tasks" 
      @remove-task="removeTask" 
      @mark-complete="markTaskComplete">
    </todo-list>
  </div>
</template>

<script>
import { ref } from 'vue';
import TodoInput from './components/TodoInput.vue';
import TodoList from './components/TodoList.vue';

export default {
  name: 'App',
  components: {
    TodoInput,
    TodoList
  },
  setup() {
    const tasks = ref([]);

    const addTask = (newTask) => {
      tasks.value.push({
        id: Date.now(),
        text: newTask,
        completed: false
      });
    };

    const removeTask = (taskId) => {
      tasks.value = tasks.value.filter(task => task.id !== taskId);
    };

    const markTaskComplete = (taskId) => {
      const task = tasks.value.find(task => task.id === taskId);
      if (task) {
        task.completed = !task.completed;
      }
    };

    return {
      tasks,
      addTask,
      removeTask,
      markTaskComplete
    };
  }
}
</script>

<style>
/* 这里可以根据需要添加样式 */
</style>

2. TodoInput 组件

接下来我们编写用于输入新任务的TodoInput组件。

<template>
  <div>
    <input 
      v-model="newTask"
      @keyup.enter="emitAddTask" 
      placeholder="Add a new task"
    />
    <button @click="emitAddTask">Add</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  name: 'TodoInput',
  emits: ['add-task'],
  setup(props, { emit }) {
    const newTask = ref('');

    const emitAddTask = () => {
      if (newTask.value.trim() !== '') {
        emit('add-task', newTask.value.trim());
        newTask.value = '';
      }
    };

    return {
      newTask,
      emitAddTask
    };
  }
}
</script>

<style>
/* 这里可以根据需要添加样式 */
</style>

3. TodoList 组件

然后编写展示任务列表的TodoList组件。

<template>
  <ul>
    <li v-for="task in tasks" :key="task.id">
      <span 
        :style="{ textDecoration: task.completed ? 'line-through' : 'none' }"
        @click="toggleComplete(task.id)"
      >
        {{ task.text }}
      </span>
      <button @click="emitRemoveTask(task.id)">Delete</button>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'TodoList',
  props: {
    tasks: Array
  },
  emits: ['remove-task', 'mark-complete'],
  setup(props, { emit }) {
    const emitRemoveTask = (taskId) => {
      emit('remove-task', taskId);
    };

    const toggleComplete = (taskId) => {
      emit('mark-complete', taskId);
    };

    return {
      emitRemoveTask,
      toggleComplete
    };
  }
}
</script>

<style>
/* 这里可以根据需要添加样式 */
</style>

四、结语

到这里,我们已经成功实现了一个基础的Todo列表应用,具备了添加、删除和标记完成任务的功能。你可以在此基础上进一步扩展该应用,比如添加编辑功能、持久化存储或者更多的样式美化。

这个项目充分展示了如何使用Vue3的组合式API(Composition API)来构建功能模块,同时也展现了组件间的通信和数据管理。


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

在这里插入图片描述

好的,下面是使用Vue.js创建一个Todo List应用的步骤: 1. 创建Vue.js应用程序 你可以使用Vue CLI来创建一个新的Vue.js应用程序。打开终端并输入以下命令: ``` vue create todo-list ``` 这将创建一个名为“todo-list”的新Vue.js应用程序,并在其中包含所有必要的文件和依赖项。 2. 创建Todo组件 在src文件夹下创建一个名为“components”的新文件夹,并在其中创建一个名为“Todo.vue”的新文件。在这个文件中,你可以创建一个新的Vue组件,用于渲染Todo List应用程序的界面。 ```html <template> <div> <h1>Todo List</h1> <form v-on:submit.prevent="addTodo"> <input v-model="newTodo" placeholder="Add a new todo"> <button type="submit">Add</button> </form> <ul> <li v-for="(todo, index) in todos" v-bind:key="index"> <input type="checkbox" v-model="todo.completed"> <span v-bind:class="{ completed: todo.completed }">{{ todo.text }}</span> <button v-on:click="deleteTodo(index)">Delete</button> </li> </ul> </div> </template> <script> export default { data() { return { newTodo: '', todos: [] } }, methods: { addTodo() { if (this.newTodo.trim()) { this.todos.push({ text: this.newTodo, completed: false }) this.newTodo = '' } }, deleteTodo(index) { this.todos.splice(index, 1) } } } </script> <style> .completed { text-decoration: line-through; } </style> ``` 在这个组件中,我们定义了一个名为“newTodo”的data属性,用于存储新的Todo项的文本内容。我们还定义了一个名为“todos”的data属性,用于存储所有的Todo项。在template中,我们使用v-for指令来遍历todos数组,并为每个Todo项渲染一个li元素。我们还使用v-bind指令来将每个Todo项的completed属性绑定到一个复选框上,以便用户可以标记完成Todo项。最后,我们还定义了两个方法:addTodo方法用于添加新的Todo项,deleteTodo方法用于删除现有的Todo项。 3. 在应用程序中使用Todo组件 打开src文件夹下的“App.vue”文件,并将Todo组件导入到该文件中。然后在template中使用Todo组件。 ```html <template> <div id="app"> <Todo /> </div> </template> <script> import Todo from './components/Todo.vue' export default { name: 'app', components: { Todo } } </script> ``` 4. 运行应用程序 现在你可以运行应用程序并查看Todo List应用程序的界面。在终端中输入以下命令: ``` npm run serve ``` 这将启动开发服务器,并在浏览器中打开Todo List应用程序。你可以添加新的Todo项,并标记完成Todo项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JJCTO袁龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值