当前位置: 首页 > 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、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

CTF show 数学不及格

拿到题目先查一下壳&#xff0c;看一下信息 发现是一个ELF文件&#xff0c;64位的 ​ 用IDA Pro 64 打开这个文件 ​ 然后点击F5进行伪代码转换 可以看到有五个if判断&#xff0c;第一个argc ! 5这个判断并没有起太大作用&#xff0c;主要是下面四个if判断 ​ 根据题目…...