首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 4 章 TypeScript编程进阶
4.1 使用泛型进行编程
4.1.1 泛型的简单使用
4.1.2 在类和接口中使用泛型
4.1.3 对泛型进行约束
4.2 迭代器与装饰器
4.2.1 关于迭代器
4.2.2 关于装饰器
4.2.3 装饰器的组合与装饰器工厂
4.3 命名空间与模块
4.3.1 命名空间的应用
4.3.2 使用模块
第 5 章 Vue中的模板
5.1 模板基础
5.1.1 模板插值
5.1.2 模板指令
5.2 条件渲染
5.2.1 使用v-if指令进行条件渲染
5.2.2 使用v-show指令进行条件渲染
5.3 循环渲染
5.3.1 v-for指令的使用方法
5.3.2 v-for指令的高级用法
5.4 范例:待办任务列表
5.4.1 使用HTML搭建应用框架结构
5.4.2 实现待办任务列表逻辑
第 6 章 Vue组件的属性和方法
6.1 属性与方法基础
6.1.1 属性基础
6.1.2 方法基础
6.2 计算属性和侦听器
6.2.1 计算属性
6.2.2 使用计算属或函数
6.2.3 计算属性的赋值
6.2.4 属性侦听器
6.3 进行函数限流
6.3.1 手动实现一个简易的限流函数
6.3.2 使用Lodash库进行函数限流
6.4 表单数据的双向绑定
6.4.1 文本输入框
6.4.2 多行文本输入区域
6.4.3 复选框与单选框
6.4.4 选择列表
6.4.5 两个常用的修饰符
6.5 样式绑定
6.5.1 为HTML标签绑定class属性
6.5.2 绑定内联样式
6.6 范例:用户注册页面
6.6.1 搭建用户注册页面
6.6.2 实现注册页面的用户交互
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(二)
小册名称:TypeScript和Vue从入门到精通(二)
### 5.4.2 实现待办任务列表逻辑 在开发Web应用时,待办任务列表(Todo List)是一个经典且实用的功能,它能够帮助用户管理和跟踪待完成的事项。在本章节中,我们将结合TypeScript和Vue.js的强大功能,从零开始实现一个功能完备的待办任务列表。我们将涵盖数据模型的定义、Vue组件的创建、任务的增删改查(CRUD)操作以及用户交互的响应处理。 #### 5.4.2.1 设计数据模型 首先,我们需要定义一个清晰的数据模型来表示待办任务。在TypeScript中,我们可以使用接口(Interface)或类型别名(Type Alias)来定义任务的数据结构。这里,我们选择使用接口,因为它提供了更严格的类型检查和更好的代码可读性。 ```typescript // src/types/Todo.ts export interface Todo { id: number; title: string; completed: boolean; } ``` 这个`Todo`接口定义了每个待办任务的基本属性:一个唯一的`id`(用于标识任务),一个`title`(任务的标题),以及一个`completed`布尔值(表示任务是否已完成)。 #### 5.4.2.2 创建Vue组件 接下来,我们需要创建一个Vue组件来展示和管理待办任务列表。这个组件将包括任务列表的显示、添加新任务的表单以及删除和切换任务完成状态的功能。 ##### TodoList.vue ```vue <template> <div> <h1>待办任务列表</h1> <input v-model="newTodoTitle" @keyup.enter="addTodo" placeholder="添加新任务" /> <ul> <li v-for="todo in todos" :key="todo.id"> <input type="checkbox" :checked="todo.completed" @change="toggleCompletion(todo.id)" /> {{ todo.title }} <button @click="removeTodo(todo.id)">删除</button> </li> </ul> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import { Todo } from '@/types/Todo'; export default defineComponent({ name: 'TodoList', setup() { const todos = ref<Todo[]>([]); const newTodoTitle = ref(''); function addTodo() { if (newTodoTitle.value.trim() !== '') { const newTodo: Todo = { id: todos.value.length + 1, // 简化的ID生成方式,实际开发中可能需要更复杂的逻辑 title: newTodoTitle.value, completed: false, }; todos.value.push(newTodo); newTodoTitle.value = ''; // 清空输入框 } } function toggleCompletion(id: number) { const todo = todos.value.find(todo => todo.id === id); if (todo) { todo.completed = !todo.completed; } } function removeTodo(id: number) { todos.value = todos.value.filter(todo => todo.id !== id); } return { todos, newTodoTitle, addTodo, toggleCompletion, removeTodo }; }, }); </script> <style scoped> /* 样式略 */ </style> ``` 在这个组件中,我们使用了Vue 3的Composition API来组织逻辑。`todos`是一个响应式引用,用于存储待办任务列表;`newTodoTitle`用于绑定输入框的值,并监听回车键来添加新任务;`addTodo`、`toggleCompletion`和`removeTodo`方法分别用于添加新任务、切换任务完成状态和删除任务。 #### 5.4.2.3 响应式更新与性能优化 在Vue中,由于使用了响应式系统,当`todos`数组发生变化时,视图会自动更新。然而,在处理大量数据或复杂逻辑时,我们需要注意性能问题。 - **避免不必要的渲染**:确保只有需要时才更新DOM。Vue的虚拟DOM和高效的更新算法已经为我们做了很多优化,但在某些情况下,如使用`v-for`渲染大量元素时,可以考虑使用`v-show`或`v-if`来控制元素的显示与隐藏,或者使用`key`来优化列表的渲染性能。 - **计算属性与侦听器**:对于复杂的逻辑,可以使用计算属性(Computed Properties)来缓存结果,避免重复计算。对于需要响应数据变化并执行异步操作或开销较大的操作时,可以使用侦听器(Watchers)。 #### 5.4.2.4 持久化存储 为了让待办任务列表在浏览器关闭后仍能保留,我们需要实现数据的持久化存储。这可以通过多种方式实现,如使用`localStorage`、`sessionStorage`、IndexedDB或WebSQL等。 以下是一个使用`localStorage`简单实现数据持久化的示例: ```typescript // 在setup函数中 onMounted(() => { const savedTodos = localStorage.getItem('todos'); if (savedTodos) { todos.value = JSON.parse(savedTodos) as Todo[]; } }); onUnmounted(() => { localStorage.setItem('todos', JSON.stringify(todos.value)); }); ``` 注意,这里使用了Vue 3的`onMounted`和`onUnmounted`生命周期钩子来分别在组件挂载和卸载时执行数据加载和保存操作。 #### 5.4.2.5 总结 在本章节中,我们详细介绍了如何使用TypeScript和Vue.js实现一个功能完备的待办任务列表。从设计数据模型、创建Vue组件、处理用户交互到实现数据的持久化存储,我们逐步构建了一个既实用又符合现代Web开发标准的待办任务应用。通过这个过程,我们不仅加深了对TypeScript和Vue.js的理解,还学会了如何在实际项目中应用这些技术来解决问题。希望这个示例能够为你的项目开发提供有益的参考和启发。
上一篇:
5.4.1 使用HTML搭建应用框架结构
下一篇:
第 6 章 Vue组件的属性和方法
该分类下的相关小册推荐:
VUE组件基础与实战
TypeScript和Vue从入门到精通(四)
Vue.js从入门到精通(四)
Vue.js从入门到精通(二)
TypeScript和Vue从入门到精通(一)
Vue原理与源码解析
Vue3技术解密
Vue源码完全解析
TypeScript和Vue从入门到精通(三)
Vue.js从入门到精通(一)
移动端开发指南
vuejs组件实例与底层原理精讲