当前位置: 首页 > news >正文

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 -y
  • npm 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开发一个电商项目&#xff1b; Hbuidler 首选uni-app官方推荐工具&#xff1a;https://www.dcloud.io/hbuilderx.htmlhttps://dev.dcloud.net.cn/pages/app/list 微信小程序 管理后台&#xff1a;htt…...

二分/双指针/单调栈队列专题

1.4924. 矩阵 - AcWing题库 一开始打表找规律以为是右上角向左下角递增,但当n很大的时候就不对了,因此我们得去观察 i * i 100000 * (i - j) j * j i * j 这个式子,我们关心的是这个式子的单调性因此我们可以分别将i和j看作常数来对式子进行求导,可以得到 f(i) 2 * i 10…...

XCCL、NCCL、HCCL通信库

XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑&#xff0c;实现的是不同的优化算法的&#xff08;不同CCL库最大的区别就是这&#xff09; 不同CCL库还会根据自己的硬件、系统&#xff0c;在底层上面对一些相对应的改动&#xff1b; 但是对上的API接口…...

【Deep Seek本地化部署】模型实测:规划求解python代码

目录 前言 一、实测 1、整数规划问题 2、非线性规划问题 二、代码正确性验证 1、整数规划问题代码验证 2、非线性规划问题代码验证 三、结果正确性验证 1、整数规划问题结果正确性验证 2、非线性规划问题正确性验证 四、整数规划问题示例 后记 前言 模型&#xff…...

MySQL锁类型(详解)

锁的分类图&#xff0c;如下&#xff1a; 锁操作类型划分 读锁 : 也称为共享锁 、英文用S表示。针对同一份数据&#xff0c;多个事务的读操作可以同时进行而不会互相影响&#xff0c;相互不阻塞的。 写锁 : 也称为排他锁 、英文用X表示。当前写操作没有完成前&#xff0c;它会…...

搜索插入位置(35)

35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 相关算法&#xff1a;二分查找最左侧和最右侧target的index-CSDN博客 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;int ans nu…...

八. Spring Boot2 整合连接 Redis(超详细剖析)

八. Spring Boot2 整合连接 Redis(超详细剖析) 文章目录 八. Spring Boot2 整合连接 Redis(超详细剖析)2. 注意事项和细节3. 最后&#xff1a; 在 springboot 中 , 整合 redis 可以通过 RedisTemplate 完成对 redis 的操作, 包括设置数据/获取数据 比如添加和读取数据 具体整…...

VDSuit-Full惯性动捕设备:高效率、高品质动画制作的利器

惯性动捕设备作为动画制作领域的新兴技术&#xff0c;与传统的关键帧动画制作相比&#xff0c;可以大大的缩短制作周期为创作者们提供极大便利。传统方式下&#xff0c;动画师需要逐帧调整角色动作&#xff0c;耗时费力。而惯性动捕设备能实时捕捉演员的动作&#xff0c;几乎瞬…...

【环境搭建】1.1源码下载与同步

目录 写在前面 一&#xff0c;系统要求 二&#xff0c;安装depot_tools 三&#xff0c;获取代码 四&#xff0c;代码同步 五&#xff0c;代码结构 写在前面 当前的开发背景是基于Google的开源Chromium&#xff0c;来开发Android设备的浏览器方案。 一&#xff0c;系统要…...

开源智慧园区管理系统对比其他十种管理软件的优势与应用前景分析

内容概要 在当今数字化快速发展的时代&#xff0c;园区管理软件的选择显得尤为重要。而开源智慧园区管理系统凭借其独特的优势&#xff0c;逐渐成为用户的新宠。与传统管理软件相比&#xff0c;它不仅灵活性高&#xff0c;而且具有更强的可定制性&#xff0c;让各类园区&#…...

C语言可变参数

在C语言中&#xff0c;处理可变参数&#xff08;Variable Arguments&#xff09;主要依赖于 <stdarg.h> 头文件中的一组宏定义。 以下是详细讲解和示例&#xff1a; 声明可变参数函数&#xff1a;使用 ... 表示可变参数 访问参数&#xff1a;通过 va_list 类型和配套宏…...

(1)Linux高级命令简介

Linux高级命令简介 在安装好linux环境以后第一件事情就是去学习一些linux的基本指令&#xff0c;我在这里用的是CentOS7作演示。 首先在VirtualBox上装好Linux以后&#xff0c;启动我们的linux&#xff0c;输入账号密码以后学习第一个指令 简介 Linux高级命令简介ip addrtou…...

frida 入门

一直想学 frida 一直鸽&#xff0c;终于有 ctf 用到了&#xff0c;我测东西这么多 官方文档感觉写的依托&#xff0c;这 python rpc 直接拿来入门真的太有生活了 frida 是一个动态插桩 (dynamic instrumentation) 工具&#xff0c;提供了交互式 cli 界面来追踪函数行为。用人话…...

基于STM32的智能健康监测手环

1. 引言 随着可穿戴设备的普及&#xff0c;健康监测技术正逐步融入日常生活。本文设计了一款基于STM32的智能健康监测手环&#xff0c;能够实时采集用户心率、血氧饱和度、体温及运动数据&#xff0c;并通过低功耗蓝牙&#xff08;BLE&#xff09;与手机APP交互。该系统结合了…...

neo4j-community-5.26.0 install in window10

在住处电脑重新配置一下neo4j, 1.先至官方下载 Neo4j Desktop Download | Free Graph Database Download Neo4j Deployment Center - Graph Database & Analytics 2.配置java jdk jdk 21 官网下载 Java Downloads | Oracle 中国 path: 4.查看java -version 版本 5.n…...

Linux+Docer 容器化部署之 Shell 语法入门篇 【Shell 循环类型】

文章目录 一、Shell 循环类型二、Shell while 循环三、Shell for 循环四、Shell until 循环五、Shell select 循环六、总结 一、Shell 循环类型 循环是一个强大的编程工具&#xff0c;使您能够重复执行一组命令。在本教程中&#xff0c;您将学习以下类型的循环 Shell 程序&…...

WAWA鱼2024年终总结,关键词:成长

前言 本来想着偷懒一下&#xff0c;不写2024年终总结了&#xff0c;因为24年上半年还在忙毕业&#xff0c;下半年在忙转正&#xff0c;其实没什么太多好写的。结果被an_da和学弟催更了&#xff0c;哈哈哈&#xff0c;感谢大家对我近况的关注&#xff0c;学校内容基本都忘的差不…...

【Redis】hash 类型的介绍和常用命令

1. 介绍 Redis 中存储的 key-value 本身就是哈希表的结构&#xff0c;存储的 value 也可以是一个哈希表的结构 这里每一个 key 对应的一个 哈希类型用 field-value 来表示 2. 常用命令 命令 介绍 时间复杂度 hset key field value 用于设置哈希表 key 中字段 field 的值为…...

二分基础两道

Leetcode704: 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出:…...

Skyeye 云 VUE 版本 v3.15.7 发布

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全&#xff0c;让Comfyui导出的图像不包含工作流信息&#xff0c;导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo&#xff08;推荐&#xff09;​​ 在 save_images 方法中&#xff0c;​​删除或注释掉所有与 metadata …...