微信小程序开发实战记录
近期公司需要开发一个小程序项目,时间非常紧急,在开发过程中遇到几个困扰的问题及解决方案,记录如下:
小程序框架选择
- 基础框架:小程序原生框架 + sass
- ui: 采用 vant weapp
- 图表:采用 ec-echarts
小程序开发
- 1 微信小程序 打开问卷星
- 2 微信小程序 wxs 使用正则的问题
- 3 微信使用 echarts 层级问题
- 4 h5 中判断是否在小程序环境中
- 5 嵌套 h5 中实现分享企微、微信和下载功能
- 6 vant weapp 样式覆盖处理
1 微信小程序 打开问卷星
小程序功能中有一个满意度调查的功能,不是原生功能,而是使用三方的问卷星网页链接,我们知道,小程序中需要嵌套网页的话,其中一条要求就是需要在网站的根目录下存放校验文件,但我们不可能在问卷星网站下去存放校验文件,所以这个功能当时陷入了困境,偶然查看问卷星的文档,发现其有小程序版同样可以使用问卷调查,但需要一个 activityId ,看格式与网页链接后缀中的一段 path 非常像,如下:

拿过来试了一下,发现真的可以使用,问题就此解决,代码如下:

2 微信小程序 wxs 使用正则的问题
因为小程序的机制,我们要在 wxml 中使用函数的话,只能通过 wxs 脚本的方式引入到页面中使用,在使用正则的时候,本人顺其自然的按照 js 中的语法使用正则,导致各种报错,还一头雾水,仔细阅读文档后发现,正则在小程序中的使用语法是不同的,需要使用自带的 getRegExp 方法,并且前后无需 / 作为开始、结束,方法包含两个参数,第一个为正则表达式的字符,第二个为正则的修饰符,代码如下:
var numberWithCommas = function (n) {return n.toString().replace(getRegExp('\B(?=(\d{3})+(?!\d))', 'g'), ',');
}
3 微信使用 echarts 层级问题
参考微信小程序,原生组件同层渲染:https://developers.weixin.qq.com/miniprogram/dev/component/native-component.html#%E5%8E%9F%E7%94%9F%E7%BB%84%E4%BB%B6%E5%90%8C%E5%B1%82%E6%B8%B2%E6%9F%93
在开发者工具中 echarts 的样式会重叠到其它组件上面,但真机中会正常显示,所以如果开发中能看得下去,就可以先不用管,解决方案的代码如下:
<view class="xc-bar"><!-- 目前在开发者工具中会有重叠的情况,真机不会 --><ec-canvas canvas-id="xc-bar" ec="{{ ec }}" id="{{ecid}}"></ec-canvas> <!-- 以下可以解决在开发者工具中重叠情况,暂无必要 --><!-- <ec-canvas canvas-id="xc-bar" force-use-old-canvas ec="{{ ec }}" id="{{ecid}}"></ec-canvas> -->
</view>
4 h5 中判断是否在小程序环境中
项目中嵌入了h5 页面,在不同的环境中,某些功能是不同的,需要我们根据环境的不同来判断处理,判断方式如下,但有一个需要我们注意的问题:
export const isWx = () => {return new Promise(resolve => {try {if (window.__wxjs_environment === 'miniprogram') {resolve('mini-wx');} else {resolve('no-mini-wx');}// window.wx?.miniProgram.getEnv((res: IMini) => {// if (res.miniprogram) {// resolve('mini-wx');// } else {// resolve('no-mini-wx');// }// });} catch (err) {resolve('no-mini-wx');console.log(err);}});
};
代码中判断的地方,都是官方文档所提供的,而被注释掉的部分,则是因为在某些情况下,getEnv 方法虽然存在,但并不会执行传入的方法,而导致 Promise 挂起,页面操作卡死。
5 嵌套 h5 中实现分享企微、微信和下载功能
项目中嵌入的h5有多个入口,包含分享功能,在app中可以通过bridge调起原生的分享、下载功能,但是在小程序中,因为平台限制的原因,不能调起小程序的 api,并且提供的jssdk也没有相关功能,所以在实现这个功能时,只能像淘宝等应用一样,把想要分享的数据,一键复制到粘贴板上,h5 粘贴复制的代码如下:
export const copyText = (text: string, cb?: () => unknown) => {const textarea = document.createElement('textarea'); // 创建一个 textarea 元素textarea.value = text; // 将要复制的文本赋值给 textarea 的 value 属性document.body.appendChild(textarea); // 将 textarea 元素添加到页面中textarea.select(); // 选中 textarea 的内容document.execCommand('copy'); // 执行复制命令document.body.removeChild(textarea); // 移除 textarea 元素cb && cb();
};
目前 execCommand 这个方法已被弃用,大家可以自行搜索最新的语法,转换也很简单
6 vant weapp 样式覆盖处理
微信小程序官方文档中说明,需要将 app.json 中的 “style”: “v2” 去除,因为小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。
{"style":"v2", // 删除此行 "sitemapLocation": "sitemap.json"}
自定义组件中需要覆盖vant 样式时需要如下设置:
Component({/*** 组件的属性列表*/properties: {},options: { styleIsolation: 'shared', }, // 重点在这!!!})
相关文章:
微信小程序开发实战记录
近期公司需要开发一个小程序项目,时间非常紧急,在开发过程中遇到几个困扰的问题及解决方案,记录如下:小程序框架选择 基础框架:小程序原生框架 sassui: 采用 vant weapp图表:采用 ec-echarts …...
防破解暗桩思路:检查菜单是否被非法修改过源码
本篇文章属于《518抽奖软件开发日志》系列文章的一部分。 我在开发《518抽奖软件》(www.518cj.net)的时候,为了防止被破解,需用添加一些暗桩,在合适的时机检查软件是否被非法修改过,如果被非法修改就做出提…...
IDEA使用Docker插件
修改Docker配置 1.执行命令vim /usr/lib/systemd/system/docker.service,在ExecStart配置的后面追加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock ExecStart/usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock -H tcp://0.0.0.0:…...
[前端] vue使用Mousetrap.js实现快捷键
Mousetrap.js介绍 Mousetrap.js 是一个处理键盘快捷键的 JavaScript 库,它允许您定义复杂的键盘快捷键并在浏览器中使用。 官方地址 代码仓库 安装库 在命令行中运行以下命令安装 mousetrap 模块: npm install mousetrap再次运行命令行,安…...
如何查询Oracle的字符集
如何查询Oracle的字符集 很多人都碰到过因为字符集不同而使数据导入失败的情况。这涉及三方面的字符集,一是oracel server端的字符集,二是oracle client端的字符集;三是dmp文件的字符集。在做数据导入的时候,需要这三个字符集都一致才能正确…...
C语言每日一练------------Day(7)
本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:两个数组的交集 双指针 💓博主csdn个人主页…...
Meta语言模型LLaMA解读:模型的下载部署与运行代码
文章目录 llama2体验地址模型下载下载步骤准备工作什么是Git LFS下载huggingface模型 模型运行代码 llama2 Meta最新语言模型LLaMA解读,LLaMA是Facebook AI Research团队于2023年发布的一种语言模型,这是一个基础语言模型的集合。 体验地址 体验地址 …...
人生中的孤独
孤独是一种深刻而痛苦的情感状态,在这个喧嚣而充满人群的世界中,许多人都曾经或正在经历孤独的阶段。 孤独并不仅仅是身边缺乏他人的陪伴,更是一种内心的空虚和失落。 孤独的人生可能来源于各种原因。 有些人可能因为缺乏亲密的人际关系&…...
掌握Spring框架核心组件:深入探讨IOC、AOP、MVC及注解方式面试指南【经验分享】
目录 引言 一、Spring IOC篇 1.什么是Spring 2.核心概念 3.核心架构 4.什么是控制反转(IOC) 5.依赖注入(DI) 二、Spring AOP篇 1.什么是AOP 2.Spring AOP代理机制 3.核心概念 4.通知分类 三、Spring MVC篇 1.什么…...
代码随想录算法训练营第37天 | ● 738.单调递增的数字 ● 968.监控二叉树 ● 总结
文章目录 前言一、738.单调递增的数字二、968.监控二叉树总结 前言 可以吗? 一、738.单调递增的数字 本题只要想清楚个例,例如98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum…...
SOPC之NIOS Ⅱ实现电机转速PID控制(调用中断函数)
通过FPGA开发板上的NIOS Ⅱ搭建电机控制的硬件平台,包括电机正反转、编码器的读取,再通过软件部分实现PID算法对电机速度进行控制,使其能够渐近设定的编码器目标值。 一、问题与改进 SOPC之NIOS Ⅱ实现电机转速PID控制_STATEABC的博客-CSDN…...
ElasticSearch安装为Win11服务
在windows的环境下操作是Elasticsearch,并且喜欢使用命令行 ,启动时通过cmd直接在elasticsearch的bin目录下执行elasticsearch ,这样直接启动的话集群名称会默elasticsearch,节点名称会随机生成。 停止就直接在cmd界面按CtrlC 其实我们也可以将elasticse…...
ransac拟合平面,代替open3d的segment_plane
0.open3d打包太大了,所以决定网上找找代码 使用open3d拟合平面并且求平面的法向量,open3d打包大概1个g的大小。 import open3d as o3dpcd o3d.geometry.PointCloud()pcd.points o3d.utility.Vector3dVector(points)## 使用RANSAC算法拟合平面plane_m…...
Docker技术--Docker镜像管理
1.Docker镜像特性 ①.镜像创建容器的特点 Docker在创建容器的时候需要指定镜像,每一个镜像都有唯一的标识:image_id,也可也使用镜像名称和版本号做唯一的标识,如果不指定版本号,那么默认使用的是最新的版本标签(laster)。 ②.镜像分层机制 Docker镜像是分层构建的,并通过…...
生态环境保护3D数字展厅提供了一个线上环保知识学习平台
在21世纪的今天,科技与环保的交汇点提供了无数令人兴奋的可能性。其中,生态环境保护3D数字展厅就是一个绝佳的例子。这个展厅以其独特的3D技术,为我们带来了一个全新的、互动的学习环境,让我们能够更直观地了解和理解我们的环境。…...
OPENCV实现计算描述子
1、计算描述子 kp,des = sift.computer(img,kp) 2、其作用是进行特征匹配 3、同时计算关键点和描述 3.1、kp,des = sift.detectAnd Computer(img,...)...
Android View动画之LayoutAnimation的使用
接前篇 Android View动画整理 ,本篇介绍 LayoutAnimation 的使用。 参考《安卓开发艺术探索》。 View 动画作用于 View 。 LayoutAnimation 则作用于 ViewGroup , 为 ViewGoup 指定一个动画,ViewGoup 的子 View 出场时就具体动画效果。 简言…...
低代码与低代码平台的概念解析
随着数字化转型和软件需求的不断增长,传统的手写代码开发方式已经无法满足迅速推出应用程序的需求。为了加快软件开发的速度并降低技术门槛,低代码开发模式应运而生。本文将介绍低代码的概念,探讨什么是低代码什么是低代码平台? 一…...
玩转Mysql系列 - 第8篇:详解排序和分页(order by limit),及存在的坑
这是Mysql系列第7篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 本章内容 详解排序查询 详解limit limit存在的坑 分页查询中的坑 排序查询(order by) 电商…...
Django实现音乐网站 ⒂
使用Python Django框架制作一个音乐网站, 本篇主要是歌手详情页-基本信息、单曲列表功能开发实现内容。 目录 歌手基本信息 增加路由 显示视图 模板显示 推荐歌手跳转详情 歌手增加基本信息 表模型增加字段 数据表更新 基本信息增加内容渲染 歌手单曲列表…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
