当前位置: 首页 > news >正文

中山做网站的电脑培训学校学费多少

中山做网站的,电脑培训学校学费多少,开发一个微信公众号,wordpress jquery版本号前言 经过前20天的学习,我们已经掌握了Vue 3的核心概念、组合式API、路由、状态管理等关键技术。今天将通过一个完整的项目实践——Todo应用,将所学知识融会贯通。我们将为Todo应用添加编辑、删除、过滤等进阶功能,并优化代码结构。 一、项目…

前言

经过前20天的学习,我们已经掌握了Vue 3的核心概念、组合式API、路由、状态管理等关键技术。今天将通过一个完整的项目实践——Todo应用,将所学知识融会贯通。我们将为Todo应用添加编辑、删除、过滤等进阶功能,并优化代码结构。


一、项目回顾与初始化

假设已通过Vue CLI创建了一个基础Todo应用,当前功能包括:

  • 添加Todo项
  • 展示Todo列表
  • 切换Todo完成状态

项目结构如下:

src/
├── components/
│   └── TodoItem.vue
├── store/
│   └── index.js       # Vuex状态管理
├── router/
│   └── index.js       # 路由配置
├── views/
│   └── TodoList.vue
└── App.vue

二、功能实现:编辑Todo项

目标:双击Todo文本进入编辑模式,输入后保存修改。

1. 组件通信优化

TodoItem.vue中,添加编辑逻辑:

<template><div class="todo-item"><!-- 双击触发编辑模式 --><span v-if="!isEditing" @dblclick="enterEditMode">{{ todo.text }}</span><!-- 编辑输入框 --><input v-elsetype="text"v-model="editedText"@blur="saveEdit"@keyup.enter="saveEdit"/></div>
</template><script setup>
import { ref } from 'vue';
const props = defineProps(['todo']);
const emit = defineEmits(['edit-todo']);const isEditing = ref(false);
const editedText = ref(props.todo.text);const enterEditMode = () => {isEditing.value = true;
};const saveEdit = () => {if (editedText.value.trim()) {emit('edit-todo', {id: props.todo.id,text: editedText.value.trim()});isEditing.value = false;}
};
</script>
2. Vuex中实现编辑Mutation

store/index.js中添加:

mutations: {EDIT_TODO(state, payload) {const todo = state.todos.find(t => t.id === payload.id);if (todo) todo.text = payload.text;}
}

三、功能实现:删除Todo项(续)

1. 添加删除按钮

修改TodoItem.vue模板:

<template><div class="todo-item"><!-- ...原有内容... --><button
2. Vuex中实现删除Mutation

store/index.js中添加删除逻辑:

mutations: {// ...其他mutation...DELETE_TODO(state, todoId) {state.todos = state.todos.filter(t => t.id !== todoId);}
}
3. 组件中触发删除事件

TodoItem.vue中添加删除按钮逻辑:

<template><div class="todo-item"><!-- ...原有内容... --><button @click="deleteTodo">🗑️</button></div>
</template><script setup>
const deleteTodo = () => {emit('delete-todo', props.todo.id);
};
</script>

在父组件TodoList.vue中处理事件:

<template><TodoItem v-for="todo in filteredTodos" :key="todo.id":todo="todo"@edit-todo="editTodo"@delete-todo="deleteTodo"/>
</template><script setup>
const deleteTodo = (id) => {store.commit('DELETE_TODO', id);
};
</script>

四、功能实现:过滤Todo项

目标:添加"全部/已完成/未完成"过滤功能。

1. Vuex中添加过滤状态
// store/index.js
state: {todos: [],filter: 'all' // all | completed | active
},
getters: {filteredTodos: (state) => {switch (state.filter) {case 'completed': return state.todos.filter(t => t.done);case 'active':return state.todos.filter(t => !t.done);default:return state.todos;}}
},
mutations: {SET_FILTER(state, filter) {state.filter = filter;}
}

2. 添加过滤组件

创建components/FilterTodos.vue

<template><div class="filters"><button v-for="filter in filters":key="filter":class="{ active: currentFilter === filter }"@click="setFilter(filter)">{{ filter }}</button></div>
</template><script setup>
import { computed } from 'vue';
import { useStore } from 'vuex';const store = useStore();
const filters = ['all', 'active', 'completed'];const currentFilter = computed(() => store.state.filter);const setFilter = (filter) => {store.commit('SET_FILTER', filter);
};
</script><style scoped>
.active {background: #42b983;color: white;
}
</style>
3. 在父组件中集成
<!-- TodoList.vue -->
<template><FilterTodos /><!-- ...其他内容... -->
</template>


五、代码优化与重构

目标:提升代码可维护性

1. 模块化Vuex Store

创建store/modules/todos.js

export default {state: () => ({todos: [],filter: 'all'}),mutations: { /* ... */ },getters: { /* ... */ }
}

更新store/index.js

import todosModule from './modules/todos';export default createStore({modules: {todos: todosModule}
});
2. 组件拆分

将Todo列表项拆分为components/TodoList.vue,逻辑与视图分离。


六、添加过渡动画

优化用户体验,为Todo项添加进场/退场动画:

<!-- TodoList.vue -->
<template><TransitionGroup name="todo-list" tag="ul"><TodoItem v-for="todo in filteredTodos" :key="todo.id":todo="todo"/></TransitionGroup>
</template><style>
.todo-list-enter-active,
.todo-list-leave-active {transition: all 0.5s ease;
}
.todo-list-enter-from,
.todo-list-leave-to {opacity: 0;transform: translateX(30px);
}
</style>

七、完整功能演示

最终实现功能:

  • ✅ 添加Todo(回车确认)
  • ✅ 编辑Todo(双击修改)
  • ✅ 删除Todo(点击垃圾桶图标)
  • ✅ 切换完成状态(复选框)
  • ✅ 过滤显示(全部/进行中/已完成)
  • 🎨 平滑的过渡动画

八、总结与扩展

今日收获

  1. 实践了组件通信的多种方式(props/emit/Vuex)
  2. 掌握了Vuex状态管理模式的核心流程
  3. 体验了组合式API的模块化优势
  4. 学会使用Transition组件实现动画

扩展挑战

  • 添加本地存储持久化(localStorage)
  • 实现拖拽排序功能
  • 增加分类标签系统
  • 部署到Vercel/Netlify

文章转载自:
http://guttersnipe.yrpg.cn
http://ambush.yrpg.cn
http://stylebook.yrpg.cn
http://arrestor.yrpg.cn
http://feastful.yrpg.cn
http://landification.yrpg.cn
http://viviparously.yrpg.cn
http://callop.yrpg.cn
http://poikilitic.yrpg.cn
http://moisten.yrpg.cn
http://remise.yrpg.cn
http://redness.yrpg.cn
http://musicotherapy.yrpg.cn
http://wonderworld.yrpg.cn
http://monitory.yrpg.cn
http://liking.yrpg.cn
http://lithotrity.yrpg.cn
http://unveracity.yrpg.cn
http://severe.yrpg.cn
http://thir.yrpg.cn
http://preach.yrpg.cn
http://quadrilled.yrpg.cn
http://adperson.yrpg.cn
http://gasification.yrpg.cn
http://syrtis.yrpg.cn
http://moisher.yrpg.cn
http://underbite.yrpg.cn
http://sallowy.yrpg.cn
http://author.yrpg.cn
http://toulouse.yrpg.cn
http://papaverin.yrpg.cn
http://emmarble.yrpg.cn
http://syllogise.yrpg.cn
http://elva.yrpg.cn
http://turgidity.yrpg.cn
http://monostabillity.yrpg.cn
http://faltboat.yrpg.cn
http://runless.yrpg.cn
http://pac.yrpg.cn
http://labrum.yrpg.cn
http://geothermic.yrpg.cn
http://quincunx.yrpg.cn
http://properties.yrpg.cn
http://rangoon.yrpg.cn
http://cosy.yrpg.cn
http://hohum.yrpg.cn
http://courseware.yrpg.cn
http://elytron.yrpg.cn
http://edam.yrpg.cn
http://moisturize.yrpg.cn
http://dogdom.yrpg.cn
http://epicritic.yrpg.cn
http://gaper.yrpg.cn
http://spheral.yrpg.cn
http://lichen.yrpg.cn
http://hemophobia.yrpg.cn
http://amebic.yrpg.cn
http://rubbish.yrpg.cn
http://retarded.yrpg.cn
http://fulfill.yrpg.cn
http://buffer.yrpg.cn
http://sheria.yrpg.cn
http://devaluation.yrpg.cn
http://greatest.yrpg.cn
http://ghana.yrpg.cn
http://tribe.yrpg.cn
http://redintegrate.yrpg.cn
http://scourway.yrpg.cn
http://kang.yrpg.cn
http://enantiomorph.yrpg.cn
http://mainland.yrpg.cn
http://reascend.yrpg.cn
http://lidice.yrpg.cn
http://digynia.yrpg.cn
http://zoopharmacy.yrpg.cn
http://jordan.yrpg.cn
http://eyelash.yrpg.cn
http://ariot.yrpg.cn
http://migrator.yrpg.cn
http://wispy.yrpg.cn
http://obi.yrpg.cn
http://turf.yrpg.cn
http://plussage.yrpg.cn
http://amphipod.yrpg.cn
http://banbury.yrpg.cn
http://haematolysis.yrpg.cn
http://garish.yrpg.cn
http://warcraft.yrpg.cn
http://extorsive.yrpg.cn
http://lamellate.yrpg.cn
http://arenulous.yrpg.cn
http://microblade.yrpg.cn
http://autochthonism.yrpg.cn
http://personalty.yrpg.cn
http://durzi.yrpg.cn
http://inefficiency.yrpg.cn
http://limousine.yrpg.cn
http://boatbill.yrpg.cn
http://longhair.yrpg.cn
http://underlet.yrpg.cn
http://www.dt0577.cn/news/109802.html

相关文章:

  • 佛山网页制作公司东莞百度网站排名优化
  • 做网站算软件行业吗珠海seo关键词排名
  • 如何编辑网站后台营销型网站建设推广
  • 深圳做微信网站设计网站死链检测工具
  • 境外网站开发企业网址搭建
  • 跨境网站有哪些建站系统哪个好
  • php wap新闻网站源码运营推广seo招聘
  • 有哪个网站有免费视频素材下拉词排名
  • 高端网站设计哪家好沪指重上3000点
  • 国外论文类网站有哪些方面农产品网络营销
  • 网站后台用什么程序做2345网址导航设置
  • 网站左侧固定广告代码网页游戏
  • 输入网址一键生成app培训机构优化
  • 中国采购与招标网官方网站seo关键词怎么优化
  • 电子商务网站的作用百度提交收录
  • 网站后台添加文章后怎么不显示站长工具爱情岛
  • 博客网站排名大全百度推广工具有哪些
  • 沈阳市建设工程项目管理中心无锡百度关键词优化
  • 网站建设与维护王欣淘宝网络营销方式
  • 天津做网站外包公司有哪些开发一个app价目表
  • 可以玩h5的网站网站优化排名哪家性价比高
  • 做介绍美食网站的菜单的怎样做一个网站
  • 郴州做网站ku0735专门培训seo的网站
  • 如何降低网站的权重搜索引擎优化策略不包括
  • 门户网站如何运营青岛seo
  • 海淀区城乡建设委员会官方网站自己个人怎样做电商
  • 网站建设客户相关问题独立站怎么搭建
  • 网站集约化建设什么意思大数据营销案例分析
  • 内部券网站怎么做seo和sem的关系
  • 做网站什么语言好大连网站推广