使用总结
- 本来想做一个记录日常数据的应用,主要在Android端使用,后来发现在uniapp中使用sqllite数据库不是像原生中那样简单(所以当前准备去进行另一个路线,就是给我使用的电脑都安装一个portalble的服务端,用来记录数据,这样也不会占用手机的空间了)。当前的使用体验如下:
- 考虑到兼容性问题,HBuilder比较适合写UI加服务端存储的项目(各种小程序,网页商城)(当然其他功能也可以进行uniapp的安卓原生插件开发或者与原生Android交互传递数据)
- Hbuilder编辑器在使用打包时要进行登录,手机绑定。使用中还出现了以下问题:
- 本地打包3.1.10版本起需要申请 Appkey。
基础
- 官方文档: https://uniapp.dcloud.net.cn/quickstart.html
重要组成 | 说明 | 注释 |
---|---|---|
vue的基础语法 | 插值和数据绑定,条件与循环等 | 重要 |
App.vue | 应用入口文件,监听应用生命周期、配置全局样式、配置全局的存储globalData | 处理app启动,切换时的命令,可以不用管 |
main.js/main.uts | 初始化vue实例、定义全局组件、使用需要的插件如 i18n、vuex | import作用 |
pages.json | 页面管理,pages数组中第一项表示应用启动页 | 重要配置文件 |
vue.config.js | 是一个可选的配置文件 | |
vite.config.js | 是一个可选的配置文件 | |
代码主要复用方式 | 认识Vue 的 export、export default、import | 重要,例子 |
各种控件 | 比如label控件 | 重要 |
uni.scss | 整体控制应用的风格 | 使用<style lang="scss"> |
存储 | uniapp本地kv存储:uni.getStorageSync | |
父子组件 | props传递值 | 例子 |
Vue.mixin | 混入 (mixin) 提供了一种非常灵活的方式,来分发 Vue 组件中的可复用功能。 | 提高复用性,在全局范围内共享代码 |
uView组件库 | uni-app 分不清的全局变量this, uni, $u, vm, uni.$u, this.$u,API集中管理:uni.$u.api. | this.$u.api.register(data) =>http://192.168.0.30:8000/api/register |
状态管理Vuex | 状态管理模式 | this.$store.dispatch:调取store里的user.js的login方法 |
插件 | 快速实现各种功能 | 时间格式化插件dayjs,Hbuilder使用tailwindcss |
兼容性
- 比如文件系统 uni.getFileSystemManager(),app平台需要使用uni-app x支持,另见,但是uni-app x是用的uts语言(uni-app x 没有使用js和webview,它基于 uts 语言。在App端,uts在iOS编译为swift、在Android编译为kotlin,完全达到了原生应用的功能、性能。并且uni-app x不支持vue2,新基座名称默认为uni-app x(之前叫HBuilder))。
例子
- 各端兼容问题,比如以下代码无法在安卓端运行
<template>
<view class="container">
<button @click="createAndWriteTxt">创建并写入txt文件</button>
</view>
</template>
<script>
export default {
methods: {
createAndWriteTxt() {
// 创建文件内容
const content = "Hello, this is a txt file content.";
// 创建Blob对象
const blob = new Blob([content], { type: "text/plain" });
// 创建下载链接
const link = document.createElement("a");
link.href = URL.createObjectURL(blob);
link.download = "example.txt";
// 模拟点击下载链接
document.body.appendChild(link);
link.click();
// 移除下载链接
document.body.removeChild(link);
},
},
};
</script>
<style>
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
text {
font-size: 16px;
color: #007aff;
text-decoration: underline;
cursor: pointer;
}
</style>
CG
-
https://playcode.io/vue
-
https://gitee.com/iamxcd/yq-uniapp
-
基于laravel+uniapp 开发的记账APP
-
最好的 6 个免费天气 API 接口对比测评
-
我为什么要选择flutter
-
AndroPHP是一款Android应用程序,它允许您在Android设备上搭建PHP服务器 : 手机搭建PHP+MYSQL完美运行WordPress
-
【XIAO ESP32S3 sense 通过 ESPHome 与 Home Assistant 连接】
-
第三篇 香橙派的外设开发基础(中)— 串口篇
-
还有一个例子,是可以在网页端运行,但是打包到app无法运行
-
前端
fetch('http://192.168.31.28:5000/upload', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
}).then(response => {
window.alert("ok !");
})
.then(responseData => {
// window.alert("sometext2");
})
.catch(error => {
window.alert(error);
});
- 后端
from flask import Flask, request
app = Flask(__name__)
from flask_cors import CORS # pip install flask_cors
CORS(app)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/upload', methods=['POST', 'GET'])
def upload():
if request.method == 'POST':
content_type = request.headers.get('Content-Type')
if content_type and 'application/json' in content_type:
user_info = request.get_json(force=True)
print(user_info)
save_to_text_file(user_info, 'data.txt')
else:
# Processing form data (as a dictionary)
user_info = request.form.to_dict()
print(user_info)
save_to_text_file(user_info, 'data.txt')
return "Data received and saved successfully."
else:
save_to_text_file("user_info", 'data.txt')
return "Data received and saved successfully."
def save_to_text_file(data, filename):
with open(filename, 'a') as file:
if isinstance(data, dict):
# Save dictionary data
file.write(str(data)+"\n")
elif isinstance(data, str):
# Save JSON data
file.write(data+"\n")
else:
raise ValueError("Unsupported data type. Expecting dict or str (JSON).")
app.run(host='0.0.0.0',port=5000) # 访问 http://127.0.0.1:5000/ 即可