HarmonyOS5.0中基于UniApp开发的智能待办事项应用
本文介绍了一个基于UniApp开发的智能待办事项应用完整项目。项目采用模块化结构,包含页面目录、可复用组件和Vuex状态管理。核心功能实现包括:1)待办事项列表的增删改查;2)可复用的待办项组件;3)Vuex状态持久化存储。项目特色:跨平台兼容性(微信小程序/H5/App)、本地数据持久化、交互优化。扩展建议包括集成云开发、多端样式适配和插件市场扩展。开发环境配置指南详细说明了从项目创建到打包发布
·
以下是一个基于UniApp开发的智能待办事项应用完整项目示例,结合官方最佳实践与开发规范,涵盖核心功能实现与跨平台适配要点:
项目结构
todo-app/
├── pages/ # 页面目录
│ ├── index/ # 首页
│ │ ├── index.vue # 主页面
│ │ └── index.json # 页面配置
├── components/ # 可复用组件
│ └── TodoItem.vue # 待办项组件
├── store/ # 状态管理
│ └── todoStore.js # Vuex状态管理
├── App.vue # 应用入口
├── main.js # 初始化文件
└── pages.json # 路由配置
核心功能实现
1. 待办事项列表(pages/index/index.vue)
<template>
<view class="container">
<!-- 输入框 -->
<input
v-model="newTodo"
placeholder="添加新任务"
@confirm="addTodo"
class="input-box"
/>
<!-- 待办列表 -->
<scroll-view scroll-y class="list-container">
<TodoItem
v-for="(item, index) in todos"
:key="index"
:item="item"
@toggle="toggleStatus(index)"
@delete="deleteTodo(index)"
/>
</scroll-view>
</view>
</template>
<script>
import TodoItem from '@/components/TodoItem.vue'
import { mapState, mapMutations } from 'vuex'
export default {
components: { TodoItem },
data() {
return { newTodo: '' }
},
computed: { ...mapState(['todos']) },
methods: {
...mapMutations(['ADD_TODO', 'TOGGLE_STATUS', 'DELETE_TODO']),
addTodo() {
if(this.newTodo.trim()) {
this.ADD_TODO({ text: this.newTodo })
this.newTodo = ''
}
},
toggleStatus(index) { this.TOGGLE_STATUS(index) },
deleteTodo(index) { this.DELETE_TODO(index) }
}
}
</script>
2. 可复用组件(components/TodoItem.vue)
<template>
<view class="todo-item">
<checkbox :checked="item.completed" @tap="$emit('toggle')" />
<text :class="{ 'completed': item.completed }">{{ item.text }}</text>
<button @tap="$emit('delete')" class="delete-btn">×</button>
</view>
</template>
<script>
export default {
props: { item: Object }
}
</script>
<style scoped>
.todo-item {
display: flex;
align-items: center;
padding: 15rpx;
border-bottom: 1rpx solid #eee;
}
.completed {
text-decoration: line-through;
color: #888;
}
.delete-btn {
margin-left: auto;
color: #ff4444;
}
</style>
状态管理(store/todoStore.js)
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
todos: JSON.parse(uni.getStorageSync('todos') || '[]')
},
mutations: {
ADD_TODO(state, payload) {
state.todos.push({ ...payload, completed: false })
uni.setStorageSync('todos', JSON.stringify(state.todos))
},
TOGGLE_STATUS(state, index) {
state.todos[index].completed = !state.todos[index].completed
uni.setStorageSync('todos', JSON.stringify(state.todos))
},
DELETE_TODO(state, index) {
state.todos.splice(index, 1)
uni.setStorageSync('todos', JSON.stringify(state.todos))
}
}
})
路由配置(pages.json)
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "待办事项",
"enablePullDownRefresh": true
}
}
],
"globalStyle": {
"navigationBarTextStyle": "white",
"navigationBarTitleText": "UniApp Todo",
"navigationBarBackgroundColor": "#007AFF",
"backgroundColor": "#F8F8F8"
}
}
核心特性实现
-
跨平台兼容
通过uni-app编译器自动适配各平台差异,同一套代码可同时发布到微信小程序、H5和App() -
数据持久化
使用uni.setStorageSync实现本地存储,结合Vuex管理全局状态() -
交互优化
scroll-view组件实现流畅滚动()- 复选框与删除按钮的点击反馈优化
扩展建议
-
云开发集成
// 接入uniCloud实现云端同步 const db = uniCloud.database() db.collection('todos').add(state.todos) -
多端样式适配
/* 条件编译 */ #ifdef MP-WEIXIN .container { padding: 20rpx; } #endif -
插件扩展
通过uni-app插件市场添加:- 时间选择器设置任务期限
- 语音输入添加待办事项
(生态扩展参考)
开发环境配置
- 安装HBuilderX()
- 创建uni-app项目选择"默认模板"
- 真机调试:
# 微信开发者工具需开启服务端口 npm run dev:mp-weixin - 打包发布:
npm run build:mp-weixin # 生成小程序包 npm run build:h5 # 生成H5页面
更多推荐
所有评论(0)