Files
Vue/todos/src/App.vue
2025-11-28 10:35:38 +08:00

82 lines
1.7 KiB
Vue

<script>
import TodoHeader from "./components/TodoHeader.vue";
import TodoList from "./components/TodoList.vue";
import TodoFooter from "./components/TodoFooter.vue";
export default {
components: {
TodoHeader,
TodoList,
TodoFooter,
},
data() {
return {
// 从 localStorage 初始化
todos: JSON.parse(localStorage.getItem("vue-todos") || "[]"),
tabType: 0, // 0全部 1未完成 2已完成
};
},
computed: {
// 筛选后的列表
todoList() {
if (this.tabType === 0) return this.todos;
const type = this.tabType;
return this.todos.filter((item) => {
if (type === 1) return !item.completed;
return item.completed;
});
},
},
methods: {
addTodo(newTodo) {
const todo = {
id: Date.now(),
txt: newTodo,
completed: false,
};
this.todos.push(todo);
console.log("添加 Todo:", todo);
},
delTodo(item) {
console.log("删除 Todo:", item);
this.todos = this.todos.filter((t) => t.id !== item.id);
},
toggleTodo(item) {
console.log("完成状态切换:", item);
},
changeTabType(type) {
console.log("切换 Tab:", type);
this.tabType = type;
},
},
watch: {
todos: {
handler(todos) {
console.log("Todos 改变:", todos);
localStorage.setItem("vue-todos", JSON.stringify(todos));
},
deep: true,
},
},
};
</script>
<template>
<TodoHeader @addTodo="addTodo" />
<TodoList :todos="todoList" @delTodo="delTodo" />
<TodoFooter
:count="todoList.length"
:tabType="tabType"
@changeTabType="changeTabType"
/>
</template>