uni-app subNvue 弹框显示异常
uni-app subNvue 弹框显示异常
示例代码:
{
"id": "dialog", // 唯一标识
"path": "./pages/device/subnvue/dialog", // 页面路径
"type": "popup",
"style": {
"position": "absolute",
"top":"24%",
"left":"48rpx",
"width": "654rpx",
"height": "584rpx",
"background": "rgba(0,0,0,0)"
}
}
操作步骤:
第一步:显示弹框,
const dialog = uni.getSubNVueById("dialog");
dialog.show('fade-in', 100, function(){
});
第二步:然后关闭屏幕
第三步:然后再打开屏幕,弹框显示异常。即使关闭弹框,重新显示也会有缺失
预期结果:
预期应该显示和关闭屏幕之前一样。信息完整不缺失
实际结果:
弹框内容有缺失
bug描述:
弹框显示后 手机锁屏,然后再显示屏幕,弹框显示异常

更多关于uni-app subNvue 弹框显示异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
俺也一样。。弹框显示缺失 但是退出app在进弹框又好了 点击以后又缺失
更多关于uni-app subNvue 弹框显示异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用之前制作的基座运行 问题就能解决了
这是一个已知的 subNvue 在屏幕状态变化时的渲染问题。当应用进入后台(如锁屏)再返回前台时,subNvue 的渲染层可能出现异常。
解决方案:
- 监听应用状态变化:在
App.vue或页面中监听应用前后台切换
// App.vue
onShow: function() {
// 应用从后台进入前台时,强制刷新所有subNvue
this.refreshSubNVue()
},
methods: {
refreshSubNVue() {
const dialog = uni.getSubNVueById("dialog")
if (dialog && dialog.isShow) {
dialog.hide()
setTimeout(() => {
dialog.show('fade-in', 100)
}, 50)
}
}
}
- 使用条件渲染:在 subNvue 页面中使用
v-if控制内容显示
<template>
<view v-if="visible">
<!-- 弹框内容 -->
</view>
</template>
<script>
export default {
data() {
return {
visible: true
}
},
onHide() {
this.visible = false
},
onShow() {
this.visible = true
}
}
</script>
- 替代方案:考虑使用 uni-app 原生组件或 uni-modal 替代 subNvue 弹框,这些组件在屏幕状态变化时更稳定。
临时修复:在显示弹框前先隐藏再显示,强制重新渲染:
const dialog = uni.getSubNVueById("dialog")
if (dialog.isShow) {
dialog.hide()
}
setTimeout(() => {
dialog.show('fade-in', 100)
}, 100)

