```
- `v-show` 控制元素显示/隐藏
- `v-if` 条件性渲染元素
- 根据数据状态动态显示内容
### 5. 列表渲染 (v-for)
```html
```
- `v-for` 循环渲染列表
- `:key` 提供唯一标识符
- 提高渲染性能
### 6. 计算属性 (computed)
```javascript
const filteredTodos = computed(() => {
// 根据filter状态过滤todos
})
```
- 基于其他数据计算得出
- 自动缓存,依赖不变时不重新计算
- 响应式更新
## 🔧 功能实现分析
### 添加待办事项
1. 用户在输入框输入内容
2. 按回车或点击添加按钮
3. 验证输入不为空
4. 创建新的todo对象
5. 添加到todos数组
6. 清空输入框
### 切换完成状态
1. 点击复选框
2. 触发toggleTodo方法
3. 找到对应的todo
4. 切换completed状态
5. UI自动更新样式
### 过滤显示
1. 点击过滤按钮
2. 更新filter状态
3. 计算属性重新计算
4. 列表自动更新显示
## 🎨 样式特点
- 使用scoped样式避免污染
- 响应式设计
- 悬停效果和过渡动画
- 清晰的视觉层次
## 🚀 实践练习
### 基础练习
1. 修改默认的待办事项
2. 改变应用的颜色主题
3. 添加更多的过滤选项
### 进阶练习
1. 添加编辑功能
2. 实现拖拽排序
3. 添加优先级标记
4. 实现本地存储
## 📖 Vue语法总结
| 语法 | 用途 | 示例 |
|------|------|------|
| `{{ }}` | 文本插值 | `{{ todo.text }}` |
| `v-model` | 双向绑定 | `v-model="newTodo"` |
| `@event` | 事件监听 | `@click="addTodo"` |
| `v-for` | 列表渲染 | `v-for="todo in todos"` |
| `v-show` | 条件显示 | `v-show="todos.length"` |
| `:class` | 动态类名 | `:class="{ active: filter === 'all' }"` |
| `ref()` | 响应式数据 | `const count = ref(0)` |
| `computed()` | 计算属性 | `const total = computed(() => ...)` |
## 🎯 下一步学习
完成这个项目后,您已经掌握了Vue的基础概念。接下来我们将学习:
- 组件化开发
- 组件通信 (props, emit)
- 插槽 (slots)
- 生命周期钩子
准备好继续学习项目2了吗?