uniapp 项目遇到的问题以及解决方案

1. 遮罩层弹出后使得页面滑动不滚动

解决方案: 在遮罩层添加 @touchmove.stop.prevent="moveHandle" moveHandle 为空函数

<view class="tips-mask" v-if="tipsMask" @touchmove.stop.prevent="moveHandle">
	// * 遮罩层		
</view>

// script 
moveHandle: function() {},

2. 在页面中动态修改页面顶部导览右侧按钮信息

解决方案:通过this.$mp.page.$getAppWebview() 获取对象信息进行修改

data() {
			return {
			
				del: true, // * true 为按钮字体为删除  false 为按钮字体为取消
			};
		},
onNavigationBarButtonTap(e) {
			this.setTopNavRightType();
			this.del = !this.del;
		},
methods: {
			setTopNavRightType() {
				var webView = this.$mp.page.$getAppWebview();
				if (this.del) {
					webView.setTitleNViewButtonStyle(0, {
						text: '取消',
						"color": "#999",
					});
				} else {
					webView.setTitleNViewButtonStyle(0, {
						text: '删除',
						"color": "#FF4A56",
					});
				}

			},
			

		}

参考: uni-app在App端动态修改原生导航栏 - DCloud问答 

参考:uniapp如何动态更新titleNView样式?_uniapp动态添加view-CSDN博客

3. 关于cover-view中的坑

1. cover-view 中嵌套内容,如果直接嵌套 view和image 那么该内容将不被展示,只能嵌套cover-view 和 cover-image

2. 当cover-view使用文字内容撑开容器的时候,出现文字现实不全、被裁剪现象,即使添加padding也无效。(H5上没问题,但真机上会出现问题)

3. 在真机调试的时候,cover-view 中使用v-if 即使为false 依旧无法隐藏,使用 v-show可以实现隐藏。

4. 在真机调试的时候,文本无法换行。哪位大佬如果有方法的话,欢迎留言,万分感谢。

以上的这些方法都无法成功使得文本换行

4. uniapp 底部tabBar的显示和隐藏

uni.showTabBar(); // tabBar 显示
uni.hideTabBar(); // tabBar 隐藏

5. 通过props 传递图片地址

icon: require("@/static/data/192@2x.png"),

// 在父组件中传递
<fu :icon="icon />

// 在子组件中使用
<image :scr="icon" />

props:['icon']

通过require 包裹地址,原因是在父组件中src的值被当作是普通字符串传给子组件,所以子组件只会当字符串处理,不会当作路径处理

require()只能接收常量

6.获取到不同移动端电量部分的高度

var height = plus.navigator.getStatusbarHeight();
console.log('height', height)

7.在uniapp 中通过动态数据使用 calc()函数修改style样式

// html部分
<view class="bank00SelectTrack-page" :style="getPageHight()"></view>

// js部分
data() {
    return {
		cycHight: 0
    }
		
},
methods:{
    let vh = '100vh';
	let nh = '100rpx';
	return {
		height: `calc(${vh} - ${nh} - ${this.cycHight + 'px'})`;
	};
}

8.关于 provide/inject

在 Vue.js 中,provide 和 inject 是一对配合使用的特性,用来实现跨层级的组件通信,尤其是从父组件向任意深层的子孙组件传递数据。这种方式特别适用于构建组件库或封装复用性高的组件时,允许组件树内部的数据流向上游传递。

// 在父组件中注入数据
provide() {
			return {
				superParams: this
			}
		},

// 在子组件中接受
inject: ['superParams'], 与data同级 第一种方式

// 使用
watch: {
			'superParams.trackIndex'(newval, oldval) {
				this.searchText = "";
			}
		}  // 在子组件中监听父组件的trackIndex数据的变化

但是使用上面第一种方式接受的方式,会导致如果在其他父组件中没有注入数据(即定义provide)则会导致报错

/*报错内容*/

/* Injection "superParams" not found */

则使用第二种方式接受数据,定义一个默认值

inject: {
			superParams: {
				default: () => {}
			}
		}, // 与data同级 则将不会报错

9. 关于ios 页面通过左划返回上一级无法被onBackPress 所监听到

原因: 左划返回上一级属于系统层面的手势识别,而非页面级别的事件。 

ios 左划返回上一级可以被onUnload(),onHide()事件所监听到,所以可以在这两个事件中进行定时器,或者监听等的清理。

在uniapp 中可以通过禁止用户左划返回上一级解决该问题

i 全局禁止

// 打开项目的 manifest.json 文件,在 app-plus 下添加如下配置

{
  "app-plus": {
    "popGesture": "none"
  }
}

ii 单文件禁止

 onLoad() {
    // uni-app v3+
    const webview = this.$scope.$getAppWebview()
    if (webview) {
      webview.setStyle({
        popGesture: 'none'
      })
    }
    
    // uni-app v2
    // const webview = plus.webview.currentWebview()
    // webview.popGesture = 'none'
  }

10. 一个好用的图表库,兼容安卓和ios 等多个平台(uCharts)

官网地址:uCharts官网 - 秋云uCharts跨平台图表库

 

11. uniapp条件编译指令 

在uni-app中,条件编译指令主要用于区分不同平台的代码块,以便实现对各个平台(如App、H5、微信小程序等)的特有功能的支持。以下是一些常用的条件编译指令:

ifdef:如果定义,表示只有在指定平台下,才会编译包含的代码块。

#ifdef PLATFORM_NAME
// 仅在名为PLATFORM_NAME的平台编译这里的代码
// 例如:#ifdef APP-PLUS 表示仅在原生App环境下编译
// 其他示例:#ifdef H5, #ifdef MP-WEIXIN(微信小程序)
...
#endif

ifndef:如果未定义,表示除了指定平台以外的所有平台都会编译包含的代码块。

#ifndef PLATFORM_NAME
// 除了名为PLATFORM_NAME的平台外,其它所有平台编译这里的代码
// 例如:#ifndef H5 表示除了H5环境之外的其他平台(包括App和小程序)都会编译这部分代码
...
#endif

同时判断多个平台,可以使用管道符|连接平台名:

#ifdef PLATFORM_NAME1|PLATFORM_NAME2
// 在名为PLATFORM_NAME1或PLATFORM_NAME2的平台下编译这里的代码
// 例如:#ifdef H5|APP-PLUS 表示在H5和原生App环境下编译
...
#endif

uni-app条件编译不仅可以应用于JavaScript代码,还可以应用于Vue模板、JSON配置文件(如pages.json)以及样式文件(SCSS、CSS)中,具体语法可能会稍有变化,比如在样式文件中可能需要使用/* #ifdef */ 和 /* #endif */的形式包裹条件编译代码块。

此外,uni-app支持的平台标识符通常包括但不限于:

  • APP-PLUS:原生App(Android/iOS)
  • H5:Web/H5环境
  • MP-WEIXIN:微信小程序
  • MP-QQ:QQ小程序
  • MP-ALIPAY:支付宝小程序
  • MP-TOUTIAO:字节跳动小程序(今日头条、抖音等)
  • MP-BAIDU:百度小程序
  • MP-KUAISHOU:快手小程序
  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uniapp常见问题包括实现APP的版本更新、CSS文本两行显示、uni-app调用上一页的方法、uni.navigateBack返回上一页面带参数、CSS动画效果、CSS边框颜色渐变、vue中组件之间调用方法、js图片转base64的方式、CSS阴影效果(Box-shadow)用法、微信小程序版本自动更新、在CSS里面引用ttf的字体、html怎么设置图片隐藏、css3如何隐藏图片、uni商品多规格sku选择器组件、uni-app video开始播放默认全屏、CSS动态渐变色字体、渐变背景、COOL-ADMIN uniapp中设置swiper的高度自适应的问题解决、uniapp判断IOS和Android的GPS是否开启并设置启动、js中给元素添加类的方法、uni-app中如何打开外部应用(如浏览器、淘宝、AppStore、QQ等)、UNI-APP安卓本地(离线)打包、微信小程序的定位获取地址信息、uniapp隐私政策和用户协议、扁平数据与树形数据的相互转换、uQRCode Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息、在线查看文档、kkFileView doc在线转html、百度地图、uniapp仿微信红包打开动画效果、数字滚动组件、计算两个时间戳之间的时间差、Excel导出、Excel带图片导出等。<span class="em">1</span> #### 引用[.reference_title] - *1* [UNIAPP常见问题](https://blog.csdn.net/weixin_49050090/article/details/127119656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值