当前位置:首页 > VUE

vscode实现vue的todolist

2026-01-20 21:39:56VUE

安装必要工具

确保已安装最新版VSCode,推荐安装以下扩展:

  • Volar(Vue官方推荐的语言支持插件)
  • Vue VSCode Snippets(代码片段快捷生成)
  • ESLint(代码规范检查)

通过终端全局安装Vue CLI:

npm install -g @vue/cli

创建Vue项目

在目标目录执行脚手架命令:

vue create vue-todolist

选择Vue 3预设配置,安装完成后进入项目目录:

cd vue-todolist

项目结构修改

删除默认的src/components/HelloWorld.vue,新建以下文件:

vscode实现vue的todolist

src/
├── components/
│   ├── TodoItem.vue
│   └── TodoForm.vue
├── App.vue
└── main.js

核心代码实现

App.vue 主组件

<template>
  <div id="app">
    <h1>Todo List</h1>
    <TodoForm @add-todo="addTodo" />
    <ul>
      <TodoItem 
        v-for="todo in todos" 
        :key="todo.id"
        :todo="todo"
        @toggle-complete="toggleComplete"
        @delete-todo="deleteTodo"
      />
    </ul>
  </div>
</template>

<script>
import TodoItem from './components/TodoItem.vue'
import TodoForm from './components/TodoForm.vue'

export default {
  components: { TodoItem, TodoForm },
  data() {
    return {
      todos: [
        { id: 1, text: 'Learn Vue', completed: false },
        { id: 2, text: 'Build project', completed: false }
      ]
    }
  },
  methods: {
    addTodo(newTodo) {
      this.todos.push({
        id: Date.now(),
        text: newTodo,
        completed: false
      })
    },
    toggleComplete(id) {
      const todo = this.todos.find(t => t.id === id)
      if (todo) todo.completed = !todo.completed
    },
    deleteTodo(id) {
      this.todos = this.todos.filter(todo => todo.id !== id)
    }
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  max-width: 600px;
  margin: 0 auto;
}
ul {
  list-style: none;
  padding: 0;
}
</style>

TodoItem.vue 子组件

<template>
  <li :class="{ completed: todo.completed }">
    <input 
      type="checkbox" 
      :checked="todo.completed"
      @change="$emit('toggle-complete', todo.id)"
    />
    <span>{{ todo.text }}</span>
    <button @click="$emit('delete-todo', todo.id)">Delete</button>
  </li>
</template>

<script>
export default {
  props: {
    todo: {
      type: Object,
      required: true
    }
  }
}
</script>

<style scoped>
li {
  display: flex;
  align-items: center;
  margin: 10px 0;
}
.completed span {
  text-decoration: line-through;
  color: #888;
}
button {
  margin-left: auto;
  background: #ff4444;
  color: white;
  border: none;
  padding: 5px 10px;
  border-radius: 3px;
  cursor: pointer;
}
</style>

TodoForm.vue 子组件

vscode实现vue的todolist

<template>
  <form @submit.prevent="handleSubmit">
    <input 
      type="text" 
      v-model="newTodo" 
      placeholder="Add new todo..."
      required
    />
    <button type="submit">Add</button>
  </form>
</template>

<script>
export default {
  data() {
    return {
      newTodo: ''
    }
  },
  methods: {
    handleSubmit() {
      this.$emit('add-todo', this.newTodo)
      this.newTodo = ''
    }
  }
}
</script>

<style scoped>
form {
  display: flex;
  margin-bottom: 20px;
}
input {
  flex: 1;
  padding: 8px;
  border: 1px solid #ddd;
  border-radius: 4px 0 0 4px;
}
button {
  padding: 8px 15px;
  background: #42b983;
  color: white;
  border: none;
  border-radius: 0 4px 4px 0;
  cursor: pointer;
}
</style>

运行项目

在VSCode终端启动开发服务器:

npm run serve

访问http://localhost:8080即可看到运行效果。使用Ctrl+C可停止服务。

项目优化建议

添加状态管理(可选安装Pinia):

npm install pinia

创建store/todoStore.js

import { defineStore } from 'pinia'

export const useTodoStore = defineStore('todos', {
  state: () => ({
    todos: []
  }),
  actions: {
    addTodo(text) {
      this.todos.push({
        id: Date.now(),
        text,
        completed: false
      })
    },
    // 其他操作方法...
  }
})

标签: vscodevue
分享给朋友:

相关文章

vue实现前端注册

vue实现前端注册

Vue 实现前端注册功能 注册表单设计 使用 Vue 的模板语法创建注册表单,包含用户名、邮箱、密码和确认密码字段。表单需绑定 v-model 实现双向数据绑定。 <template>…

vue实现压缩上传文件

vue实现压缩上传文件

压缩上传文件的实现方法 在Vue中实现文件压缩和上传功能,可以通过以下步骤完成。该方法结合了前端文件压缩库和HTTP请求,确保文件在上传前被有效压缩。 安装必要的依赖 需要使用compressor…

vue前端实现打印功能

vue前端实现打印功能

使用Vue实现前端打印功能 在Vue项目中实现打印功能可以通过多种方式完成,以下是几种常见的方法: 使用window.print()方法 这是最简单的打印方式,直接调用浏览器的打印功能。 me…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简单…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLH…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…