mirror of
https://github.com/Dichgrem/Vue.git
synced 2025-12-16 13:41:59 -05:00
82 lines
1.7 KiB
Vue
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>
|