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

uniapp 之 一些常用方法的封装(页面跳转,页面传参等)

util.js

提示:permission.js是uniapp插件市场由官方DCloud_heavensoft提供的App权限判断和提示插件。

import permision from "@/js_sdk/wa-permission/permission.js"/*** uni.toast 封装* @param {String} msg  toast 提示内容* @param {Number} duration = 1500 提示显示时间,毫秒单位*/
export const toast = (msg, duration = 1500) => {uni.showToast({title: msg,duration: duration,icon: 'none',mask: true,});
};/*** 返回* @param {Function} successCallback 返回成功回调函数 * @param {Number} delta = 1, 返回页面层级 */
export const pageBack = (delta = 1, successCallback) => {uni.navigateBack({delta,success: successCallback});
};/*** 跳转* @param {String} url 必填,跳转路径 * @param {Object} data 传递的参数,*/
export const jump = (url, data) => {console.log('jump--------', url);uni.navigateTo({url,success: (res) => {res.eventChannel.emit('getPrePageData', { data })}});
};/*** 获取jump 方法 跳转页面传递的参数* @param {Object} vm 必填,当前调用此方法的vue实例,传递this即可*/
export const getPrePageData = (vm) => {return new Promise((resolve) => {const eventChannel = vm.getOpenerEventChannel();// 监听getPrePageData事件,获取上一页面通过eventChannel传送到当前页面的数据eventChannel.on('getPrePageData', (data) => {resolve(data.data)})})
}/*** 关闭当前页面跳转* @param {String} url 必填,跳转路径 */
export const redirectTo = (url) => {console.log('redirectTo--------', url);uni.redirectTo({url});
};/*** 关闭所有页面跳转* @param {String} url 必填,跳转路径 */
export const reLaunch = (url) => {console.log('reLaunch--------', url);uni.reLaunch({url});
};/*** tabbar 跳转* @param {String} url 必填,跳转路径 */
export const switchTabJump = (url) => {console.log('switchTabJump--------', url);uni.switchTab({url});
};/*** 显示loading,显示透明蒙层,防止触摸穿透* @param {String} title = '加载中'  loading提示文字*/
export const showLoading = (title = '加载中') => {uni.showLoading({title,mask: true});
}/*** 隐藏showLoading*/
export const hideLoading = () => {uni.hideLoading();
}/*** 复制* @param {*} data  复制的内容 * @param {*} toastTitle = '已复制到粘贴板', 复制成功后的提示语*/
export const handleCopy = (data, toastTitle = '已复制到粘贴板') => {uni.setClipboardData({data: data,success: function() {toast(toastTitle)}});
}

关于jump方法以及getPrePageData方法的调用

  • jump调用
<viewclass="list-item flex-box"v-for="(item, index) in dataList":key="index"@click="jump(`/pages/data-center/settlement-history/settlement-detail`, item)"
>
<!-- ... -->
</view>
  • getPrePageData调用
async onLoad() {const data = await getPrePageData(this)console.log('data: ', data)this.detail = datathis.getSettlementDetail()
},

跨页面获取选择数据

一般通过返回api(pageBack 自己通过uni api 封装的页面返回方法)的 successCallback 事件,发送(uni.$emit)chooseData 事件

/*** 跨页面获取选择数据,一般通过返回api(pageBack)的 successCallback 事件,发送(uni.$emit)chooseData 事件* @param {String} url 页面url*/
export const getChooseData = async (url = '') => {return new Promise((reslove, reject) => {uni.$once('chooseData', (data) => {if (data === null) {reject('navigate back');} else {reslove(data);}});jump(url);});
};

调用:

  1. A 页面
// A页面引用并调用
import { getChooseData } from '@/utils/utls.js';// 跳转到B页面,选择数据
let list = await getChooseData ('/pages/index/xxx');
console.log('list', list); // 这个list 也就是B页面点击确定后返回传过来的arr
  1. B 页面
// B页面点击确定数据后并返回发送chooseData事件
pageBack(1, () => {uni.$emit('chooseData', arr);
});

这种方法常用于页面选择数据,例如:A页面需要维护一些表单数据,如公司,但是公司的数据需要在B页面显示,然后B页面通过单选或者复选的方式选择并确定后返回到A页面,并将刚刚选择的数据带到A页面


/*** 扫码*/
export const handleScan = async () => {const appAuthorizeSetting = uni.getAppAuthorizeSetting();if (plus.os.name.toLocaleLowerCase() === 'ios' && appAuthorizeSetting.cameraAuthorized == 'not determined') {// 如果未请求过,在ios默认调用一次,将权限加到列表中const res = await scanCode();return res;} else {if (plus.os.name.toLocaleLowerCase() === 'ios') {if (!permision.judgeIosPermission('camera')) { // 判断iOS上是否给予权限,有权限返回true,否则返回falseuni.showModal({content: '检测到您没打开获取相机功能权限,是否去设置打开?',confirmText: "确认",cancelText: '取消',success: (res) => {if (res.confirm) {// 打开系统设置页面permision.gotoAppPermissionSetting();} else {toast('获取相机授权失败,部分功能无法使用')}}})} else {const res = await scanCode();return res;}} else {const res = await permision.requestAndroidPermission('android.permission.CAMERA');// 1 已获得权限,0 拒绝本次,-1永久拒绝if (res == 1) {const res = await scanCode();return res;} else {uni.showModal({content: '检测到您没打开获取相机功能权限,是否去设置打开?',confirmText: "确认",cancelText: '取消',success: (res) => {if (res.confirm) {// 打开系统设置页面permision.gotoAppPermissionSetting();} else {toast('获取相机授权失败,部分功能无法使用')}}})}}}
}/*** scanCode*/
export const scanCode = async () => {return new Promise((resolve) => {uni.scanCode({success: (res) => {resolve(res)}});})
}/*** 对象数组去重* @param {array} arr,需要去重的数组* @param {string} key,通过指定key值进行去重* @returns {array} 返回一个去重后的新数组*/
export const noRepeatArrOfObj = (arr, key) => {const res = new Map();return arr.filter((item) => !res.has(item[key]) && res.set(item[key], true));
}/*** 锚点跳转(如:商品详情页面跳转)* @param {string} targetId 目标id* @param {string} rootId 外层盒子根id*/
export const goByAnchor = (targetId, rootId) => {if (targetId) {uni.createSelectorQuery().select('#' + targetId).boundingClientRect(data => {// 目标位置节点 类或者 iduni.createSelectorQuery().select("#" + rootId).boundingClientRect(res => {// 最外层盒子节点类或者 iduni.pageScrollTo({duration: 300, // 过渡时间  scrollTop: data.top - res.top - 88, // 到达距离顶部的top值})}).exec()}).exec();} else {uni.pageScrollTo({scrollTop: 0,duration: 300});}
}/*** 选择图片,参数options = {}* @param {Number} count = 9  最多可以选择的图片张数,默认9* @param {Boolean} isOnlyCamera = [ true | false ] 是否只是用相机* @param {Object} crop 裁剪的相关配置,设置后 sizeType 失效*/
export const chooseImage = (options) => {return new Promise((resolve, reject) => {let defaultOptions = {count: 9,isOnlyCamera: false,};let opt = Object.assign(defaultOptions, options);let sourceType = opt.isOnlyCamera ? ['camera'] : ['album', 'camera'];uni.chooseImage({...opt,sourceType: sourceType, // album 从相册选图,camera 使用相机,默认二者都有success: (res) => {resolve(res);},fail: (err) => {reject(err);}});})
}/*** 获取当前元素的一些info,如:距离顶部的距离*/
export const getElementInfoById = (elementId) => {return new Promise((resolve) => {uni.createSelectorQuery().select('#' + elementId).boundingClientRect(data => {resolve(data)}).exec()})
}/*** uni.preview 预览图片* @@param {Array} imgList = [] 预览的图片链接数组*/
export const previewImg = (imgList) => {// 预览图片uni.previewImage({urls: imgList,});
}/*** 获取manifest.json中的版本号、版本名称*/
getVisionCode() {return new Promise(resolve => {plus.runtime.getProperty(plus.runtime.appid, (wgtinfo) => {let version = wgtinfo.version; // 版本名称let versionCode = wgtinfo.versionCoderesolve({ version, versionCode })})})
}

关于锚点跳转方法的调用,查看uniapp 之 实现商品详情的锚点跳转(类似京东商品详情-点击顶部按钮跳转的对应的页面的内容区域)

相关文章:

uniapp 之 一些常用方法的封装(页面跳转,页面传参等)

util.js 提示&#xff1a;permission.js是uniapp插件市场由官方DCloud_heavensoft提供的App权限判断和提示插件。 import permision from "/js_sdk/wa-permission/permission.js"/*** uni.toast 封装* param {String} msg toast 提示内容* param {Number} duration …...

flutter 单列选择器

引入 flutter_pickers: ^2.1.9 import package:flutter_pickers/pickers.dart; import package:flutter_pickers/style/default_style.dart; import package:flutter_pickers/style/picker_style.dart;List<String> _numberList [99,98,97,96,95,94,93,92,91,90,89,88,…...

管理类联考–复试–英文面试–问题–WhatWhyHow--纯英文汇总版

文章目录 Do you have any hobbies? What are you interested in? What do you usually do in your spare time? Could you tell me something about your family&#xff1f; Could you briefly introduce your family? What is your hometown like? Please tell me so…...

亮数据代理IP轻松解决爬虫数据采集痛点

文章目录 一、爬虫数据采集痛点二、为什么使用代理IP可以解决&#xff1f;2.1 爬虫和代理IP的关系2.2 使用代理IP的好处 一、爬虫数据采集痛点 爬虫数据采集可能会面临一些挑战和痛点&#xff0c;其中包括&#xff1a; 爬虫代码维护难&#xff1a;网站的结构可能会经常变化&am…...

html5cssjs代码 035 课程表

html5&css&js代码 035 课程表 一、代码二、解释基本结构示例代码常用属性样式和装饰响应式表格辅助技术 一个具有亮蓝色背景的网页&#xff0c;其中包含一个样式化的表格用于展示一周课程安排。表格设计了交替行颜色、鼠标悬停效果以及亮色表头&#xff0c;并对单元格设…...

Eclipse For ABAP:安装依赖报错

1.安装好Eclipse后需要添加依赖,这里的地址: https://tools.hana.ondemand.com/latest 全部勾选等待安装结束; 重启后报错:ABAP communication layer is not configured properly. This might be caused by missing Microsoft Visual C++ 2013 (x64) Runtime DLLs. Consu…...

C++特性三:多态---纯析构和纯虚析构

多态使用时&#xff0c;如果子类中有属性开辟到堆区&#xff0c;那么父类指针在释放时无法调用到子类的析构代码 解决方式&#xff1a;将父类中的析构函数改为虚析构或者纯虚析构 虚析构和纯虚析构共性&#xff1a; 1.可以解决父类指针释放子类对象 2.都需要有具体的函数实现…...

创建可引导的 macOS 安装器

你可以将外置驱动器或备用宗卷用作安装 Mac 操作系统的启动磁盘。 以下高级步骤主要适用于系统管理员以及其他熟悉在“终端”中输入命令的经验丰富的用户。 升级 macOS 或重新安装 macOS 不需要可引导安装器&#xff0c;但如果你要在多台电脑上安装 macOS&#xff0c;而又不…...

ssm+vue的公廉租房维保系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的公廉租房维保系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…...

【pycharm】作为Array查看出现数据无法显示问题(已解决)

【pycharm】作为Array查看出现数据无法显示问题&#xff08;已解决&#xff09; 当我们在调试代码的时候&#xff0c;需要对某个变量进行查看&#xff0c;就如同在matlab中&#xff0c;我们可以直接在工作区对某个变量进行双击查看矩阵变量的具体数值 在这里我遇到一个问题&am…...

matlab处理贝塞尔函数

说明:问题来自CSDN-问答板块,题主提问。 需求:在使用解析法求解电机的三维模型,编写程序时需要用到修正的贝塞尔函数,问题是在贝塞尔函数的自变量和阶数变化时函数值变化很大,导致最后求出来的气隙磁密非常大。 一、运行截图 二、解决代码...

【Python】Pycharm 的 python_stubs

Pycharm 的 python_stubs 问题 问题 Pycharm 为了对各种库暴露接口能在编码时提供快速的智能提示&#xff0c;会解析库并在 pycharm 安装目录的 python_stubs 下生成对应的存根&#xff0c;这个操作可以有效的提升 Pycharm 智能提示的效率。但是也有一个问题&#xff0c;称之为…...

AI大模型智能大气科学探索之:ChatGPT在大气科学领域建模、数据分析、可视化与资源评估中的高效应用及论文写作

本文深度探讨人工智能在大气科学中的应用&#xff0c;特别是如何结合最新AI模型与Python技术处理和分析气候数据。介绍包括GPT-4等先进AI工具&#xff0c;旨在帮助大家掌握这些工具的功能及应用范围。本文内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等案例…...

rpc详解rpc框架

文章目录 概述rpc的优点组件工作流程&RPC的底层原理RPC的底层原理 RPC框架rpc框架优点RPC 的实现基础RPC的应用场景RPC使用了哪些关键技术rpc 调用异常一般怎么处理rpc和http的区别为什么RPC要比HTTP更快一些Dubbo和openfeign 区别远程调用RPC框架传输协议传输速度 概述 在…...

【评分标准】【网络系统管理】2019年全国职业技能大赛高职组计算机网络应用赛项H卷 无线网络勘测设计

第一部分&#xff1a;无线网络勘测设计评分标准 序号评分项评分细项评分点说明评分方式分值1点位设计图AP编号AP编号符合“AP型号位置编号”完全匹配5AP型号独立办公室、小型会议室选用WALL AP110完全匹配5员工寝室选用智分&#xff0c;其他用放装完全匹配5其它区域选用放装AP…...

停止docker 容器并删除对应镜像

docker 容器相关命令 docker ps 查看当前系统正在运行的容器情况&#xff0c;返回信息分别为&#xff1a; 容器ID&#xff1a;CONTAINER ID 镜像名IMAGE NAMES 运行命令COMMAND 创建时间CREATED 状态STATUS 映射端口 PORTS docker ps |grep XXX 可以…...

什么是服务器,有什么特性?

服务器是一种高性能计算机&#xff0c;作为网络的节点&#xff0c;存储、处理网络上80&#xff05;的数据、信息&#xff0c;服务器作用比较广&#xff0c;网络游戏、网站、部分软件都是需要存到服务器的&#xff0c;还有一些企业会配服务器。今天&#xff0c;德迅云安全带您来…...

【Django】CORS跨域问题

通过 django-cors-headers 库来实现&#xff0c;此方法亲测有效 1、下载 pip install django-cors-headers2、修改 settings.py 配置文件 1&#xff09;添加到应用列表 INSTALLED_APPS (##...corsheaders )2&#xff09;添加到中间件列表 MIDDLEWARE [django.middleware.…...

npm 常用命令详解

npm&#xff0c;即 Node Package Manager&#xff0c;是 Node.js 的包管理器。它允许你安装、更新、删除和管理 Node.js 项目中的依赖包。在 Node.js 开发中&#xff0c;npm 的使用频率极高&#xff0c;掌握其常用命令对于开发者来说是至关重要的。本文将详细解释 npm 的常用命…...

外包干了14天,技术退步明显。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了成都一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路

进入2025年以来&#xff0c;尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断&#xff0c;但全球市场热度依然高涨&#xff0c;入局者持续增加。 以国内市场为例&#xff0c;天眼查专业版数据显示&#xff0c;截至5月底&#xff0c;我国现存在业、存续状态的机器人相关企…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...