2021版小程序开发5——小程序项目开发实践(1)
2021版小程序开发5——小程序项目开发实践(1)
学习笔记 2025
使用uni-app开发一个电商项目;
Hbuidler
- 首选uni-app官方推荐工具:
- https://www.dcloud.io/hbuilderx.html
- https://dev.dcloud.net.cn/pages/app/list
微信小程序
- 管理后台:https://mp.weixin.qq.com/?token=&lang=zh_CN
- 小程序IDE:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
- 文档:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html
uni组件库:
- https://zh.uniapp.dcloud.io/tutorial/miniprogram-subject.html
字体图标
- https://www.iconfont.cn/
z-paging 插件用法:
- https://z-paging.zxlee.cn/
1 开发环境
uni-app
- https://uniapp.dcloud.net.cn/
- 使用
vue语法开发所有前端应用的框架; - 跨平台,只需编写一套代码,可以开发app、h5、各类小程序;
HBuilderX
IDE推荐使用HBuilderX(下载安装app开发板)
- 提供了丰富的模版
- 完善的智能提示
- 一键运行
在HBuilderX中安装Sass编译的插件
scss/sass编译插件
- 登录dcloud插件市场(https://ext.dcloud.net.cn/),下载相应的编译插件
compile-node-sass; - 使用HBuilderX导入安装即可;
- 这样后续项目中的css样式,就都可以使用sass语法进行编写了;
<style lang="scss"></style>
HBuilderX个性化配置
工具->预设快捷键方案切换->VSCode;
工具->设置->打包Settings.json按需配置;
2 项目初始化
新建 项目 uni-app
- 指定项目名、存放路径,推荐使用uni-ui项目模版;
- uni-ui:https://uniapp.dcloud.net.cn/component/#uniui
项目目录结构:
componentscomp-a.vue
pagesindexindex.vuelistlist.vue
static // 静态资源存放位置(视频 图片等)
main.js // vue初始化入口文件
App.vue // 应用全局配置
manifest.json // 应用信息配置
pages.json // 配置小程序页面路径、窗口样式 tabbar navigationBar等页面类信息
运行项目到微信开发者工具:
- 在manifest.json 微信小程序配置中填写微信小程序的AppID;
- 工具->设置->打包Settings.json,在
运行配置中的小程序运行配置,配置微信开发者工具的路径; - 在微信开发者工具中,设置->安全设置,开启
服务端口; - HBuilderX中,运行->运行到小程序模拟器->微信开发者工具(编译后自动运行);
在manifest.json(源码视图下)中的
mp-weixin对应的就是微信小程序中的配置对象,其setting节点可以配置以前我们在小程序的project.config.json中setting节点的配置项;
Git管理项目:
- 新建
.gitignore,配置:/node_modules和/unpackage/dist- 如果要跟踪一个空目录,可以在该目录下新建一个
.gitkeep的文件进行占位;
- 如果要跟踪一个空目录,可以在该目录下新建一个
- 相关git操作,如
git init等;- 本地git
- 配置远程ssh公钥
- 远程创建仓库,本地推送至远程仓库
3 项目开发
创建页面
新建页面:
- 使用 scss页面
- 勾选 在pages.json中注册
- 勾选 创建同名目录
- 输入页面名称 创建即可,页面内容如下
<template><view></view>
</template><script>export default {data() {return {};}}
</script><style lang="scss"></style>
新建四个页面
- home
- cate
- cart
- my
在小程序开发者工具中,配置某一个页面的编译模式,仍然是可用的;
配置tabBar效果
将图标等静态资源放到static目录(根据功能划分子目录);
在pages.json配置文件,新增tabBar配置节点:
{"tabBar": {"selectedColor": "#C00000","list": [{"pagePath": "pages/home/home","text": "首页","iconPath": "static/tab_icons/home.png","selectedIconPath": "static/tab_icons/home-active.png"},// cate cart my 等tabBar页面配置// 删除默认的index页面及配置]}
}
修改导航条样式
在pages.json配置文件的globalStyle节点进行配置:
"globalStyle": {"navigationBarTextStyle": "white","navigationBarTitleText": "Title", // 每个page的style节点同名属性会覆盖该值;"navigationBarBackgroundColor": "#C00000","backgroundColor": "#FFFFFF"
}
网络请求配置
小程序中不支持axios,而wx.request()功能简单,不支持拦截器等全局定制,uni-app中使用@escook/request-miniprogram三方包发起网络请求;
npm init -ynpm install @escook/request-miniprogram
文档:https://www.npmjs.com/package/@excook/request-miniprogram
在main.js中进行配置:
import { $http } from '@escook/request-miniprogram'// uni 类似 wx 同为全局对象,也可以在uni上挂载一些全局的自定义方法
uni.$http = $http
$http.baseUrl = "https://www.test.com"
// ...
// 拦截器
$http.beforeRequest = function(options){uni.showLoading({title:"Loading..."})
}
$http.afterRequest = function(){uni.hideLoading()
}
一般在页面的onLoad中发送网络请求;另外这是vue语法,因此方法需要定义到methods中;
// 使用示例
async getDatas(){const {data: res} = await uni.$http.get("/suburl")// 结构返回信息的data赋值给resif (res.meta.status !== 200){return uni.showToast({title:"Error",duration: 1500,icon: 'none'})}this.datalist = res.datas
}
轮播图
键入uswiper,就可以填入预设的代码段;
- circular:衔接滚动
<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true"><swiper-item v-for="(item, index) in datalist" :key="index"><view class="swiper-item"><image :src="item.image_src"></image></view></swiper-item>
</swiper><style lang="scss">
swiper {height: 330rpx;<!-- 同时为两个选择器对应的视图添加样式 -->.swiper-item, image {width: 100%;heitht: 100%;}
}
</style>
《2021版小程序开发1——起步》-8 轮播图组件
为了使轮播图点击可以跳转到相应页面,可使用navigator组件替换掉包括image的view组件;url指定目标页面的路径,同时传递了一个id参数;
<swiper-item v-for="(item, index) in datalist" :key="index"><navigator class="swiper-item" :url="'/subpkg/goods_detail/goods_detail?goods_id=' + item.id"><image :src="item.image_src"></image></navigator>
</swiper-item>
《2021版小程序开发3——视图与逻辑》-1 页面导航
如果通过点击事件触发导航,可以使用uni.navigateTo方法:
gotoDetail(id){uni.navigateTo({url: '/subpkg/detail/detail?id=' + id})
}
uni-app如何配置小程序分包
- 在项目根目录,创建分包根目录
subpkg - 在
pages.json中,和pages节点平级生命subPackages节点,以定义分包相关结构;
"subPackages": [{"root": "subpkg","pages": []}
]
- 分包页面,在
subpkg目录右击新建页面(注意在选项页面,还要选择小程序所属分包,如subpkg);
选择分包的页面创建,会自动修改json配置;
《2021版小程序开发4——基础加强》-7 分包
Flex布局
《弹性布局-更优秀的Flex》https://blog.csdn.net/baby_hua/article/details/105952517
四个分类导航按钮,就可以通过Flex布局方便的实现样式;
抛掉iOS布局的经验,深入理解流式布局;
点击分类导航到分类tab页面
<view v-for="(item, index) in navList" :key="index" @click="navClickHandler(item)"></view>
navClickHandler(item){if (item.name == "cate"){uni.switchTab({url:"/pages/cate/cate"})}
}
图片动态绑定样式和显示模式设置
<imag :src="" :style="{width: img_width + 'rpx'}" mode="widthFix">宽度固定 高度自适应</imag>
git基本操作
# 创建分支
git chechout -b branch_a# 提交本地修改
git add .
git commit -m 'tag info'# 将分支推送到远程
git push -u origin branch_a# 本地分支合并
git chechout master
git merge home# 删除分支
git branch -d branch_a
滑动区域-滚动视图
scroll-view组件
- 指定滑动方向,如
scroll-y; - 如果是纵向可滑动,还需要指定一个固定的高度(对于确定的宽度或高度,
可以直接使用px单位,而无需使用rpx);
该组件还支持一个属性
scroll-top,用于设置滚动条到顶部的距离;值的话可以0和1切换,以响应变化;
<scroll-view scroll-y="true" :style="{height: scroll_height + 'px'}"></scroll-view>
如果想让滚动视图纵向充满全屏,需要使用uni提供的获取系统信息的同步接口:uni.getSystemInfoSync()
- screenHeight:屏幕高度;
- windowHeight:可用窗口高度(一般是减去navigationBar和tabBar高度后的值);
onLoad() {const systemInfo = uni.getSystemInfoSync()this.scroll_height = systemInfo.windowHeight
}
多类名样式SCSS
<view class="classP classS">xxx</view><!-- 动态绑定多类名设置 -->
<view :class="['classP', index === action_index ? 'classS' : '']">xxx</view>
.classP{line-height: 30px;font-size: 12px;font-weight: bold;text-align: center;padding: 15px 0;color: #EEEEEE,/* 既包含classP 又包含classS 则额外添加如下样式 */&.classS {backgroundColor: #EEEEEE;position: relative;/* 通过尾元素添加额外样式: 靠左 居中的 小红条 */&::before {content: ' ';display: block;width: 3px;height: 30px;backgroundColor: #C00000;position: absolute;top: 50%;left: 0;transform: translateY(-50%);}}
}
自定义组件
在components目录上,右击新建组件,使用scss并创建同名目录,点击创建即可;
创建后的组件,可以直接使用标签形式进行使用;
自定义组件绑定click事件(和其他事件),需要在组件中使用
this.$emit("click")进行触发;
组件属性:
props: {bgColor: {type: String,default: "#ffffff"},radius: {type: Number,default: 18}
}
组件吸顶效果
position: sticky;是 CSS 中的一个定位属性,它可以让元素在滚动时“粘”在页面的某个位置,直到达到指定的阈值。这个属性结合了 position: relative; 和 position: fixed; 的特点,常用于实现滚动时固定在页面某个区域的元素,比如导航栏、表头或侧边栏。
/* 组件包裹容器 */
.op-box {position: sticky;/* 元素距离视口顶部的距离,当滚动超过这个距离时,元素会粘在顶部;或其他方向的值,如 bottom, left, right; */top: 0;/* 提高层级 防止覆盖 */ z-index: 999;
}
默认行为:
- 元素在页面中正常渲染,表现为 position: relative; 的效果。
- 元素会跟随页面滚动。
触发粘性行为:
- 当页面滚动到指定的阈值(通过 top, bottom, left, 或 right 设置),元素会“粘”在容器的边界上,表现为 position: fixed; 的效果。
- 当滚动回到阈值范围内,元素会恢复为 position: relative; 的行为。
uni-app中uni组件的修改
uni的组件会存档到一个单独的目录中uni_modules;
可以到组件的源代码中,对样式进行修改;
搜索框自动获取焦点
这里使用的是 uni-search-bar,可以修改其源码属性值:
show: true,
showSync: true,
需要真机预览;
搜索文本框的防抖处理
// data中定义
{
keyword: '',
timer: null,
},
// input事件:每输入一个字符都会回调 并返回当前值
input(e){// 清除延时器clearTimeout(this.timer)// 500ms内没有新回调 才为keyword赋值this.timer = setTimeout(()=>{this.keyword = e.value// 随即可以发送网络请求}, 500)
}
文本单行省略显示处理
.line-1{/* 文字不换行 */white-space: nowrap;/* 溢出隐藏 */overflow: hidden;/* 文本溢出 使用...代替 */text-overflow: ellipsis;margin-right: 3px;
}
uni组件库提供的组件 标签名即类名
.uni-tag{margin: 5px;
}
数组解构初始化一个新数组
computed: {datalistShow() {return [...this.datalist].reverse()}
}
利用Set对象去重数组
const set = new Set(this.datalist)
set.delete(this.kw) // 删除是为了调关键词顺序
set.add(this.kw)
this.datalist = Array.from(set)
检索历史记录数据存本地Storage
// 存
uni.setStorageSync("keywords", JSON.stringfy(this.datalist))// 取
this.datalist = JSON.parse(uni.getStorageSync("keywords") || '[]')
相关文章:
2021版小程序开发5——小程序项目开发实践(1)
2021版小程序开发5——小程序项目开发实践(1) 学习笔记 2025 使用uni-app开发一个电商项目; Hbuidler 首选uni-app官方推荐工具:https://www.dcloud.io/hbuilderx.htmlhttps://dev.dcloud.net.cn/pages/app/list 微信小程序 管理后台:htt…...
元音字母(模拟)
给定一个由大小写字母、空格和问号组成的字符串。 请你判断字符串中的最后一个字母是否是元音字母。 我们认为元音字母共有 66 个,分别为:AA、EE、II、OO、UU、YY(当然还有它们的小写)。 输入格式 一个由大小写字母、空格和问…...
如何处理 Typecho Joe 主题被抄袭或盗版的问题
在开源社区中,版权保护是一个非常重要的话题。如果你发现自己的主题(如 Joe 主题)被其他主题(如子比主题)抄袭或盗版,你可以采取以下措施来维护自己的权益。 一、确认侵权行为 在采取任何行动之前…...
将markdown文件和LaTex公式转为word
通义千问等大模型生成的回答多数是markdown类型的,需要将他们转为Word文件 一 pypandoc 介绍 1. 项目介绍 pypandoc 是一个用于 pandoc 的轻量级 Python 包装器。pandoc 是一个通用的文档转换工具,支持多种格式的文档转换,如 Markdown、HTM…...
自动化测试框架搭建-封装requests-优化
目的 1、实际的使用场景,无法避免的需要区分GET、POST、PUT、PATCH、DELETE等不同的方式请求,以及不同请求的传参方式 2、python中requests中,session.request方法,GET请求,只支持params传递参数 session.request(me…...
Smart contract -- 钱包合约
在区块链的世界里,钱包是存储和管理加密货币的基本工具。今天,我们将通过 Solidity 智能合约来创建一个简单的以太坊钱包。这个钱包将允许用户存入和取出以太坊主币(ETH),并且只有管理员(合约的创建者&…...
模拟实战-用CompletableFuture优化远程RPC调用
实战场景 这是广州某500-900人互联网厂的面试原题 手写并发优化解决思路 我们要调用对方的RPC接口,我们的RPC接口每调用一次对方都会阻塞50ms 但是我们的业务要批量调用RPC,例如我们要批量调用1k次,我们不可能在for循环里面写1k次远程调用…...
图 、图的存储
图的基本概念: 图g由顶点集v和边集e组成,记为g(v,e) 用|v|表示图g中顶点的个数,也称图g的阶,用|e|表示图g中边的条数 线性表可以是空表,树可以是空树,但图不可以是空&…...
快速提升网站收录:利用网站新闻发布功能
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/63.html 利用网站新闻发布功能快速提升网站收录是一个有效的策略。以下是一些具体的建议,帮助你更好地利用这一功能: 一、保持新闻更新频率 搜索引擎尤其重视网站的…...
信息学奥赛一本通 2112:【24CSPJ普及组】地图探险(explore) | 洛谷 P11228 [CSP-J 2024] 地图探险
【题目链接】 ybt 2112:【24CSPJ普及组】地图探险(explore) 洛谷 P11228 [CSP-J 2024] 地图探险 【题目考点】 1. 模拟 2. 二维数组 3. 方向数组 在一个矩阵中,当前位置为(sx, sy),将下一个位置与当前位置横纵坐…...
【数据结构】(4) 线性表 List
一、什么是线性表 线性表就是 n 个相同类型元素的有限序列,每一个元素只有一个前驱和后继(除了第一个和最后一个元素)。 数据结构中,常见的线性表有:顺序表、链表、栈、队列。 二、什么是 List List 是 Java 中的线性…...
YOLO11/ultralytics:环境搭建
前言 人工智能物体识别行业应该已经饱和了吧?或许现在并不是一个好的入行时候。 最近看到了各种各样相关的扩展应用,为了理解它,我不得不去尝试了解一下。 我选择了git里非常受欢迎的yolo系列,并尝试了最新版本YOLO11或者叫它ultr…...
Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)
WebFlux优缺点 【来源DeepSeek】 Spring WebFlux 是 Spring 框架提供的响应式编程模型,旨在支持非阻塞、异步和高并发的应用场景。其优缺点如下: 优点 高并发与低资源消耗 非阻塞 I/O:基于事件循环模型(如 Netty)&am…...
《OpenCV》——图像透视转换
图像透视转换简介 在 OpenCV 里,图像透视转换属于重要的几何变换,也被叫做投影变换。下面从原理、实现步骤、相关函数和应用场景几个方面为你详细介绍。 原理 实现步骤 选取对应点:要在源图像和目标图像上分别找出至少四个对应的点。这些对…...
20250202在Ubuntu22.04下使用Guvcview录像的时候降噪
20250202在Ubuntu22.04下使用Guvcview录像的时候降噪 2025/2/2 21:25 声卡:笔记本电脑的摄像头自带的【USB接口的】麦克风。没有外接3.5mm接口的耳机。 缘起:在安装Ubuntu18.04/20.04系统的笔记本电脑中直接使用Guvcview录像的时候底噪很大! …...
fflush的概念和使用案例
fflush() 是C语言标准库中用于控制输入/输出缓冲区的函数,其主要功能是强制刷新缓冲区,确保数据及时写入目标设备(如屏幕、文件)。以下是其概念和典型使用场景: 概念 功能: 刷新指定流的缓冲区。对于输出流…...
2024年度总结
首先,我是在2023年结束高中生涯进入大学的,难免会有固化的“高中生”思维,我等着老师的安排,看着课表上课,跟着时间吃饭,睡觉,偶尔会熬夜,但整体跟高中没差太多。我对社团没兴趣&…...
The Simulation技术浅析(四):随机数生成
随机数生成技术 是 The Simulation 中的核心组成部分,广泛应用于蒙特卡洛模拟、密码学、统计建模等领域。随机数生成技术主要分为 伪随机数生成器(PRNG,Pseudo-Random Number Generator) 和 真随机数生成器(TRNG,True Random Number Generator)。 1. 伪随机数生成器(PR…...
如何生成强密码:提高网络安全性的全面指南
引言 在数字化时代,密码的安全性至关重要。随着我们在社交媒体、电子邮件、在线银行等平台上储存越来越多的个人信息,强密码的使用变得更加关键。强密码能有效防止暴力破解、字典攻击等安全威胁。因此,在本文中,我们将深入探讨如…...
结构体DMA串口接收比特错位
发送: 显示: uint16_t接收时候会比特错位。...
如何在Intellij IDEA中识别一个文件夹下的多个Maven module?
目录 问题描述 理想情况 手动添加Module,配置Intellij IDEA的Project Structure 问题描述 一个文件夹下有多个Maven项目,一个一个开窗口打开可行但是太麻烦。直接open整个文件夹会发现Intellij IDEA默认可能就识别一个或者几个Maven项目,如…...
基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...
YOLOV11-1:YoloV11-安装和CLI方式训练模型
YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境,其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…...
用FormLinker实现自动调整数据格式,批量导入微软表单
每天早上打开Excel时,你是否也经历过这样的噩梦? 熬夜调整好的问卷格式,导入微软表单后全乱套 客户发来的PDF反馈表,手动录入3小时才完成10% 200道题库要转为在线测试,复制粘贴到手指抽筋 微软官方数据显示…...
Pluto固件编译笔记
前段时间我已经做到在电脑上交叉编译一个简单的c/c程序,然后复制到pluto上运行。 要做到这一点,其实参考adi pluto官网的wiki就能做到了。 但这样有几个问题,只能做到简易程序,如果程序复杂,要调用更多库而SYSROOT里…...
Docker Hub 镜像 Pull 失败的解决方案
目录 引言一、问题二、原因三、解决方法四、参考文献 引言 在云原生技术火热的当下,Docker可谓是其基础,由于其简单以及方便性,让开发人员不必再为环境配置问题而伤脑筋,因为可将其看作一个虚拟机程序去理解。所以掌握好它可谓是…...
弄懂Runable,Callable,Future之间的关系
JDK1.5之前,我们创建线程有这样两种方式 1.继承Thread类 2.连接实现Runnable接口 但是这两个方法我们都没有返回值,如果需要获取任务返回结果怎么办? 然后在JDK1.5之后,官方就提供了Callable和Future,有获取任务返…...
Kafka中文文档
文章来源:https://kafka.cadn.net.cn 什么是事件流式处理? 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础,在这个世界里,企业越来越多地使用软件定义 和 automated,而软件的用户更…...
Shell $0
个人博客地址:Shell $0 | 一张假钞的真实世界 我们已经知道在Shell中$0表示Shell脚本的文件名,但在有脚本调用的情形中,子脚本中的$0会是什么值呢?我们通过下面的实例来看。 已测试系统列表: Mac OS X EI Capitan 1…...
Hugging Face GGUF 模型可视化
Hugging Face GGUF 模型可视化 1. Finding GGUF files (检索 GGUF 模型)2. Viewer for metadata & tensors info (可视化 GGUF 模型)References 无知小儿,仙家雄霸天下,依附强者才是唯一的出路。否则天地虽大,也让你们无路可走࿰…...
