当前位置:首页 > 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,新建以下文件:

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 子组件

<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

vscode实现vue的todolist

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实现报表通常需要结合图表库或表格组件。以下是几种常见方法: 使用ECharts 安装ECharts库: npm install echarts vue-echart…

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

vue实现route

vue实现route

Vue 路由实现方法 Vue 中实现路由通常使用 vue-router 库,这是 Vue 官方推荐的路由管理器。以下是具体实现步骤: 安装 vue-router 通过 npm 或 yarn 安装…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

实现vue table

实现vue table

Vue 表格实现方法 基础表格实现 使用 Vue 的 v-for 指令可以快速渲染表格数据。在模板中定义表格结构,通过数据绑定动态生成行和列。 <template> <tabl…

vue实现注销

vue实现注销

实现用户注销功能 在Vue应用中实现用户注销功能通常涉及清除用户会话、重置应用状态并跳转到登录页面。以下是具体实现方法: 清除用户认证信息 使用Vuex或Pinia管理用户状态时,需在注销时重置存储…