在本篇博客中,我们将开发一个完整的跨端应用,包含用户认证、数据管理和消息推送等功能。我们会逐步实现每个功能模块,并确保应用可以在 H5、App 和小程序等多个平台上运行。下面是本项目的功能概览和详细代码实现。
我们将开发一个简单的待办事项应用,用户可以通过该应用进行注册、登录、管理待办事项和接收消息推送。具体功能如下:
首先,确保安装 HBuilderX,下载地址:HBuilderX。安装完成后,打开 HBuilderX 并创建一个新的 UniApp 项目。
在项目中创建以下结构:
/todo-app
├── /pages
│ ├── /login
│ │ └── login.vue
│ ├── /register
│ │ └── register.vue
│ ├── /todo
│ │ └── todo.vue
├── /store
│ └── index.js
├── /utils
│ └── api.js
└── App.vue
我们将使用一个简单的 REST API 实现用户注册和登录功能。为了模拟 API,我们可以使用 JSONPlaceholder 或自行搭建一个 Node.js API。以下示例将展示如何使用 uni.request
进行网络请求。
我们将假设存在一个 REST API,提供以下两个接口:
POST /api/register
:用于用户注册POST /api/login
:用于用户登录示例:api.js
// /utils/api.js
const API_URL = 'https://jsonplaceholder.typicode.com'; // 替换为实际 API
export const registerUser = async (userData) => {
return uni.request({
url: `${API_URL}/register`,
method: 'POST',
data: userData,
});
};
export const loginUser = async (userData) => {
return uni.request({
url: `${API_URL}/login`,
method: 'POST',
data: userData,
});
};
示例:register.vue
<template>
<view class="container">
<form @submit.prevent="register">
<input v-model="username" placeholder="用户名" />
<input v-model="password" type="password" placeholder="密码" />
<button type="submit">注册</button>
</form>
</view>
</template>
<script>
import { registerUser } from '@/utils/api.js';
export default {
data() {
return {
username: '',
password: ''
};
},
methods: {
async register() {
try {
const response = await registerUser({ username: this.username, password: this.password });
if (response[1].status === 200) {
uni.showToast({ title: '注册成功', icon: 'success' });
setTimeout(() => {
uni.navigateTo({ url: '/pages/login/login.vue' });
}, 1500);
} else {
uni.showToast({ title: '注册失败', icon: 'none' });
}
} catch (error) {
uni.showToast({ title: '请求失败', icon: 'none' });
}
}
}
};
</script>
<style>
.container {
padding: 20px;
}
</style>
示例:login.vue
<template>
<view class="container">
<form @submit.prevent="login">
<input v-model="username" placeholder="用户名" />
<input v-model="password" type="password" placeholder="密码" />
<button type="submit">登录</button>
</form>
</view>
</template>
<script>
import { loginUser } from '@/utils/api.js';
export default {
data() {
return {
username: '',
password: ''
};
},
methods: {
async login() {
try {
const response = await loginUser({ username: this.username, password: this.password });
if (response[1].status === 200) {
uni.showToast({ title: '登录成功', icon: 'success' });
// 保存用户信息
uni.setStorageSync('userInfo', response[1].data);
uni.navigateTo({ url: '/pages/todo/todo.vue' });
} else {
uni.showToast({ title: '登录失败', icon: 'none' });
}
} catch (error) {
uni.showToast({ title: '请求失败', icon: 'none' });
}
}
}
};
</script>
<style>
.container {
padding: 20px;
}
</style>
用户登录后,可以访问待办事项页面,在此页面中用户可以添加、删除和查看待办事项。
示例:todo.vue
<template>
<view class="container">
<input v-model="newTodo" placeholder="添加待办事项" />
<button @click="addTodo">添加</button>
<view v-for="(todo, index) in todos" :key="index">
<text>{{ todo }}</text>
<button @click="removeTodo(index)">删除</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
newTodo: '',
todos: []
};
},
onLoad() {
// 从本地存储中加载待办事项
const storedTodos = uni.getStorageSync('todos') || [];
this.todos = storedTodos;
},
methods: {
addTodo() {
if (this.newTodo) {
this.todos.push(this.newTodo);
uni.setStorageSync('todos', this.todos);
this.newTodo = '';
} else {
uni.showToast({ title: '待办事项不能为空', icon: 'none' });
}
},
removeTodo(index) {
this.todos.splice(index, 1);
uni.setStorageSync('todos', this.todos);
}
}
};
</script>
<style>
.container {
padding: 20px;
}
</style>
为了模拟消息推送功能,我们将简单使用定时器向用户展示待办事项的提醒。
在待办事项页面中添加定时器,每隔一段时间提醒用户完成待办事项。
修改:todo.vue
export default {
data() {
return {
newTodo: '',
todos: [],
timer: null // 定时器
};
},
onLoad() {
const storedTodos = uni.getStorageSync('todos') || [];
this.todos = storedTodos;
// 开始消息推送
this.startPushNotification();
},
methods: {
addTodo() {
if (this.newTodo) {
this.todos.push(this.newTodo);
uni.setStorageSync('todos', this.todos);
this.newTodo = '';
} else {
uni.showToast({ title: '待办事项不能为空', icon: 'none' });
}
},
removeTodo(index) {
this.todos.splice(index, 1);
uni.setStorageSync('todos', this.todos);
},
startPushNotification() {
this.timer = setInterval(() => {
if (this.todos.length) {
uni.showToast({ title: `你还有 ${this.todos.length} 个待办事项未完成!`, icon: 'none' });
}
}, 10000); // 每 10 秒提醒一次
},
onUnload() {
// 清理定时器
clearInterval(this.timer);
}
}
};
在 HBuilderX 中运行项目,选择需要测试的平台(如 H5、App 或小程序)。确保各个功能模块正常工作,用户能够完成注册、登录、管理待办事项并接收消息推送。
测试以下功能是否正常:
通过本项目,我们展示了如何使用 UniApp 开发一个完整的跨端应用,涵盖了用户认证、数据管理和消息推送等功能。我们使用 uni.request
进行网络请求,管理用户状态,存储待办事项,并使用定时器实现简单的消息推送功能。
在实际项目中,您可以根据需求扩展功能
,增加更多复杂的业务逻辑和 API 调用。这只是一个基础示例,您可以基于此进行更深入的学习和开发。
希望本文对您了解 UniApp 的开发流程有所帮助!如果有任何问题或建议,请随时留言讨论。