赞
踩
本章将通过一个简单的实战项目案例来帮助读者巩固之前学习到的知识。我们将搭建一个名为“ToDoList”的微信小程序,实现一个简单的任务清单功能。
ToDoList是一个用于记录和管理任务的小程序。用户可以添加、编辑、完成和删除任务,以及查看任务清单。
在开始开发之前,我们需要准备以下内容:
在创建好的项目中,我们可以看到以下的目录结构:
├── app.js ├── app.json ├── app.wxss ├── pages │ ├── index │ │ ├── index.js │ │ ├── index.json │ │ ├── index.wxml │ │ └── index.wxss │ └── detail │ ├── detail.js │ ├── detail.json │ ├── detail.wxml │ └── detail.wxss └── utils └── util.js
其中,app.js
是小程序的入口文件,app.json
是小程序的全局配置文件,app.wxss
是小程序的全局样式文件。
pages
文件夹中存放了小程序的页面文件,每个页面都有独立的文件夹,包含了对应的 .js
, .json
, .wxml
, .wxss
文件。
utils
文件夹中存放了一些通用的工具函数,我们将在后续的开发中用到。
在 pages/index
文件夹中,我们将实现任务清单的首页。
在 index.wxml
中,我们将创建一个简单的任务列表和添加任务的表单。
<!-- pages/index/index.wxml --> <view class="container"> <view class="header"> <text class="title">ToDoList</text> </view> <view class="task-list"> <!-- 任务列表 --> <block wx:for="{{taskList}}" wx:key="index"> <view class="task-item"> <checkbox class="checkbox" value="{{item.completed}}" bindchange="completeTask" data-index="{{index}}"></checkbox> <view class="task-info"> <text class="{{item.completed ? 'completed' : ''}}">{{item.title}}</text> </view> <image class="delete-icon" src="../../images/delete.svg" bindtap="deleteTask" data-index="{{index}}"></image> </view> </block> <!-- 任务为空时显示的提示 --> <view class="empty-hint" wx:if="{{taskList.length === 0}}">暂无任务</view> </view> <view class="task-form"> <input class="task-input" placeholder="请输入任务内容" bindinput="inputTask" value="{{inputValue}}"></input> <button class="add-button" bindtap="addTask">添加任务</button> </view> </view>
上述代码中,我们引用了一个delete.svg文件,这其实是一个矢量图文件,阿里云为我们提供了丰富的免费矢量图,我们可用访问https://www.iconfont.cn/搜索下载需要的图片。
这里我复制其svg
代码,在我们项目中创建images
目录,并创建delete.svg
文件,置入我们复制的代码即可。
在 index.wxss
中,我们将为首页的样式文件添加一些基本样式和布局。
/* pages/index/index.wxss */ .container { padding: 20rpx; } .header { text-align: center; margin-bottom: 20rpx; } .title { font-size: 24rpx; font-weight: bold; } .task-list { margin-bottom: 20rpx; } .task-item { display: flex; align-items: center; margin-bottom: 10rpx; } .checkbox { margin-right: 10rpx; } .task-info { flex: 1; } .completed { text-decoration: line-through; } .delete-icon { width: 20rpx; height: 20rpx; } .empty-hint { text-align: center; color: #999; font-size: 16rpx; margin-top: 20rpx; } .task-form { display: flex; align-items: center; } .task-input { flex: 1; border: 1rpx solid #999; padding: 5rpx; border-radius: 5rpx; } .add-button { background-color: #51a1e7; color: #fff; padding: 5rpx 10rpx; border-radius: 5rpx; margin-left: 10rpx; }
在 index.js
中,我们将在 index.js
中实现首页的逻辑和数据绑定。
// pages/index/index.js Page({ data: { taskList: [], // 任务列表数据 inputValue: '', // 输入框的值 }, // 监听输入框输入事件 inputTask: function (event) { this.setData({ inputValue: event.detail.value, }); }, // 添加任务 addTask: function () { const title = this.data.inputValue.trim(); if (title === '') { return; } const newTask = { title: title, completed: false, }; const taskList = this.data.taskList; taskList.push(newTask); this.setData({ taskList: taskList, inputValue: '', }); }, // 完成任务 completeTask: function (event) { const index = event.currentTarget.dataset.index; const taskList = this.data.taskList; taskList[index].completed = !taskList[index].completed; this.setData({ taskList: taskList, }); }, // 删除任务 deleteTask: function (event) { const index = event.currentTarget.dataset.index; const taskList = this.data.taskList; taskList.splice(index, 1); this.setData({ taskList: taskList, }); }, });
在 index.json
中,我们只需要设置页面标题即可。
{
"navigationBarTitleText": "ToDoList"
}
至此,我们已经完成了首页的设计和布局。接下来我们将完成任务详情页的设计和逻辑部分。
在 pages/detail
文件夹中,在 pages/detail
文件夹中,我们将实现任务的编辑和详情展示功能。
在 detail.wxml
中,我们将展示任务的标题和描述,并提供编辑和保存功能。
<!-- pages/detail/detail.wxml -->
<view class="container">
<view class="header">
<text class="title">{{task.title}}</text>
</view>
<view class="content">
<view class="label">描述:</view>
<textarea class="description" bindinput="inputDescription" value="{{task.description}}"></textarea>
</view>
<view class="footer">
<button class="edit-button" bindtap="toggleEditMode">{{editMode ? '保存' : '编辑'}}</button>
</view>
</view>
在 detail.wxss
中,我们为任务详情页添加一些样式。
/* pages/detail/detail.wxss */ .container { padding: 20rpx; } .header { text-align: center; margin-bottom: 20rpx; } .title { font-size: 24rpx; font-weight: bold; } .content { margin-bottom: 20rpx; } .label { font-weight: bold; margin-bottom: 10rpx; } .description { width: 100%; height: 200rpx; border: 1rpx solid #999; padding: 5rpx; border-radius: 5rpx; } .footer { text-align: center; } .edit-button { background-color: #51a1e7; color: #fff; padding: 5rpx 10rpx; border-radius: 5rpx; }
我们将在 detail.js
中实现任务详情页的逻辑和数据绑定。
// pages/detail/detail.js Page({ data: { task: {}, // 任务数据 editMode: false, // 编辑模式开关 }, // 监听页面加载事件 onLoad: function (options) { const task = JSON.parse(options.task); this.setData({ task: task, }); }, // 监听输入框输入事件 inputDescription: function (event) { const task = this.data.task; task.description = event.detail.value; this.setData({ task: task, }); }, // 切换编辑模式 toggleEditMode: function () { if (this.data.editMode) { // 保存修改 // 这里可以添加保存任务的逻辑,比如更新后端数据等 // 这里只是简单地将编辑模式关闭 this.setData({ editMode: false, }); } else { // 进入编辑模式 this.setData({ editMode: true, }); } }, });
在 detail.json
中,我们只需要设置页面标题即可。
{
"navigationBarTitleText": "任务详情"
}
至此,我们已经完成了任务详情页的设计和逻辑部分。
通过这个实战项目案例,我们学习了如何搭建一个简单的任务清单小程序,并实现了添加、编辑、删除和查看任务的功能。同时,我们还学习了如何设计页面结构和布局,如何进行数据的绑定和事件的处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。