一、Uniapp简介与开发环境搭建
Uniapp是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、Web(响应式)、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)、快应用等多个平台。
1.1 环境准备
首先需要安装HBuilderX,这是DCloud官方推出的IDE,提供了完善的Uniapp开发环境。
下载地址:https://www.dcloud.io/hbuilderx.html
1.2 创建项目
打开HBuilderX,点击文件→新建→项目,选择Uniapp项目模板,填写项目名称和路径,选择默认模板。
二、项目结构与配置
Uniapp项目基本目录结构如下:
├── pages // 页面文件目录
│ └── index
│ └── index.vue // 首页页面
├── static // 静态资源目录
├── App.vue // 应用配置,用来配置App全局样式以及监听
├── main.js // Vue初始化入口文件
├── manifest.json // 配置应用名称、appid、logo、版本等打包信息
├── pages.json // 配置页面路由、导航条、选项卡等页面类信息
└── uni.scss // 全局样式变量
2.1 配置pages.json
我们需要在pages.json中配置页面路由和窗口表现:
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "待办事项"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "待办事项",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
}
}
三、开发待办事项应用
3.1 设计数据结构
我们的待办事项应用需要存储任务内容、完成状态和创建时间:
data() {
return {
todoList: [], // 待办事项列表
inputValue: '', // 输入框内容
// 示例数据
// {id: 1, content: '学习Uniapp', completed: false, createTime: 1621234567890}
}
}
3.2 实现页面布局
在pages/index/index.vue中编写页面模板:
<template>
<view class="container">
<view class="header">
<text class="title">待办事项</text>
</view>
<view class="input-area">
<input
class="input"
v-model="inputValue"
placeholder="添加新任务..."
@confirm="addTodo"
/>
<button class="add-btn" @click="addTodo">添加</button>
</view>
<view class="todo-list">
<view
v-for="(item, index) in todoList"
:key="item.id"
class="todo-item"
:class="{completed: item.completed}"
>
<checkbox
:checked="item.completed"
@click="toggleTodo(index)"
/>
<text class="todo-content">{{item.content}}</text>
<text class="delete-btn" @click="deleteTodo(index)">删除</text>
</view>
</view>
<view class="footer" v-if="todoList.length > 0">
<text>总计: {{todoList.length}} 任务, 已完成: {{completedCount}}</text>
</view>
</view>
</template>
3.3 实现业务逻辑
在Vue的methods中添加交互功能:
methods: {
// 添加待办事项
addTodo() {
if (!this.inputValue.trim()) {
uni.showToast({
title: '内容不能为空',
icon: 'none'
});
return;
}
const newTodo = {
id: Date.now(),
content: this.inputValue,
completed: false,
createTime: Date.now()
};
this.todoList.push(newTodo);
this.inputValue = '';
this.saveTodos();
},
// 切换完成状态
toggleTodo(index) {
this.todoList[index].completed = !this.todoList[index].completed;
this.saveTodos();
},
// 删除待办事项
deleteTodo(index) {
this.todoList.splice(index, 1);
this.saveTodos();
},
// 保存到本地存储
saveTodos() {
uni.setStorageSync('todoList', this.todoList);
},
// 从本地存储加载
loadTodos() {
const todos = uni.getStorageSync('todoList');
if (todos) {
this.todoList = todos;
}
}
}
3.4 添加计算属性
使用计算属性统计已完成任务数量:
computed: {
completedCount() {
return this.todoList.filter(item => item.completed).length;
}
}
3.5 添加样式
在style部分添加样式美化界面:
.container {
padding: 20rpx;
}
.header {
margin-bottom: 30rpx;
}
.title {
font-size: 40rpx;
font-weight: bold;
}
.input-area {
display: flex;
margin-bottom: 30rpx;
}
.input {
flex: 1;
border: 1px solid #eee;
padding: 20rpx;
border-radius: 10rpx;
margin-right: 20rpx;
}
.add-btn {
background-color: #007AFF;
color: white;
padding: 0 30rpx;
border-radius: 10rpx;
}
.todo-item {
display: flex;
align-items: center;
padding: 20rpx;
border-bottom: 1px solid #eee;
}
.todo-content {
flex: 1;
margin-left: 20rpx;
}
.completed .todo-content {
text-decoration: line-through;
color: #888;
}
.delete-btn {
color: #FF3B30;
font-size: 24rpx;
}
.footer {
margin-top: 30rpx;
text-align: center;
color: #888;
font-size: 24rpx;
}
四、数据持久化存储
为了让应用关闭后数据不丢失,我们使用Uniapp的本地存储API:
// 在页面加载时读取数据
onLoad() {
this.loadTodos();
}
// 在methods中添加保存和读取方法
saveTodos() {
try {
uni.setStorageSync('todoList', this.todoList);
} catch (e) {
uni.showToast({
title: '保存失败',
icon: 'none'
});
}
},
loadTodos() {
try {
const todos = uni.getStorageSync('todoList');
if (todos) {
this.todoList = todos;
}
} catch (e) {
uni.showToast({
title: '读取失败',
icon: 'none'
});
}
}
五、多平台适配与发布
5.1 条件编译
Uniapp提供了条件编译功能,可以针对不同平台编写特定代码:
// #ifdef MP-WEIXIN
console.log('这是微信小程序平台');
// #endif
// #ifdef H5
console.log('这是H5平台');
// #endif
// #ifdef APP-PLUS
console.log('这是App平台');
// #endif
5.2 发布到不同平台
发布到H5: 在HBuilderX中点击”发行”→”网站-H5手机版”
发布到微信小程序: 在manifest.json中配置微信小程序AppID,然后点击”发行”→”小程序-微信”
发布到App: 需要配置证书和打包设置,然后点击”发行”→”原生App-云打包”
六、功能扩展建议
至此,我们已经完成了一个基础的待办事项应用。你可以进一步扩展以下功能:
- 添加任务分类和标签
- 实现任务优先级排序
- 添加任务提醒功能
- 实现数据云同步
- 添加任务分享功能
- 实现暗黑模式主题切换
七、总结
通过本教程,我们学习了如何使用Uniapp开发一个完整的跨平台待办事项应用。Uniapp的强大之处在于其”一次开发,多端发布”的能力,大大提高了开发效率。
在实际项目中,你可能还需要考虑更多细节,如性能优化、用户体验、错误处理等。希望本教程能为你入门Uniapp开发提供帮助!

