uni-app HbuilderX 4.44版本 nvue页面添加subNVues子页面 无法通过hide或close方法隐藏或关闭
uni-app HbuilderX 4.44版本 nvue页面添加subNVues子页面 无法通过hide或close方法隐藏或关闭
产品分类
uniapp/App
开发环境与版本信息
项目 | 信息 |
---|---|
PC开发环境操作系统 | Windows |
PC开发环境版本号 | 10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.44 |
手机系统 | iOS |
手机系统版本号 | iOS 17 |
手机厂商 | 苹果 |
手机机型 | iPhone XR |
页面类型 | nvue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码
pages.json页面
"app-plus": {
"subNVues": [{
"id": "bannerPopup",
"path": "pages/travel/subnvue/bannerPopup",
"type": "popup",
"mask": "rgba(0,0,0,0)",
"style": {
"background": "transparent",
"margin": "auto"
}
}]
}
首页nvue页面
const subNVue = uni.getSubNVueById('bannerPopup');
subNVue.show('zoom-fade-in', 500);
bannerPopup.nvue页面
const subNVue = uni.getCurrentSubNVue();
subNVue.hide('fade-out', 500);
// subNVue.close();
操作步骤
首页为nvue页面,并且配置了subNVues弹框,进入首页执行弹出该弹框,在弹框内部执行关闭功能。
预期结果
能正常关闭subnvue弹框。
实际结果
执行该方法没有反应。
bug描述
首页用到了地图,使用nvue页面,为了覆盖底下tabbar,在app-plus下的subNVues配置了遮罩弹框页面,之前的版本都可以通过subNVue.hide或subNVue.close方法可以关闭或隐藏遮罩,更新到4.44版本后,触发该方法没有反应。
另外,在IOS旁白模式下,如果使用subNVue.hide方法,之前的版本虽然可以隐藏subNVue页面,但是无法选中页面的元素,只有使用subNVue.close方法,才能选择页面原生。
你之前是什么版本?能不能提个复现工程?
安卓是否正常?
测试了一下,是条件编译有问题,我之前用的是hbuildX4.36,#ifdef APP-IOS 和 #ifdef APP-ANDROID 这两个可以正常编译,现在升级为新版本后,无法正常编译,没有执行条件里面的代码> ;
const subNVue = uni.getCurrentSubNVue();
// #ifdef APP-IOS
subNVue.close();
// #endif
// #ifdef APP-ANDROID
subNVue.hide(‘fade-out’, 500);
// #endif
另外就是IOS的旁边模式下,使用subNVue.hide()方法,虽然关闭了弹框,但是旁白模式下的选中区域还是在subNVue弹框那边,现在是只能通过subNVue.close()来解决,但是使用了subNVue.close()就无法再次打开弹框,这一块有解决办法吗?
在uni-app中使用nvue页面时,如果遇到无法通过hide
或close
方法隐藏或关闭subNVues
子页面的情况,通常是由于方法调用不正确或者页面结构设置有问题。下面我将提供一个简单的代码示例,展示如何在nvue页面中正确地添加并控制subNVues
子页面。
主页面 (main.nvue)
首先,创建一个主页面,其中包含一个按钮用于打开子页面,以及一个函数用于尝试隐藏或关闭子页面。
<template>
<div>
<button @click="openSubNVue">打开子页面</button>
<button @click="closeSubNVue">关闭子页面</button>
<sub-nvue ref="subNVueRef" id="subNVuePage" v-if="subNVueVisible"></sub-nvue>
</div>
</template>
<script>
export default {
data() {
return {
subNVueVisible: false
};
},
methods: {
openSubNVue() {
const subNVue = uni.createSubNVue({
url: 'sub.nvue', // 子页面路径
id: 'subNVuePage',
style: {
top: '0px',
left: '0px',
width: '300px',
height: '100%'
}
});
this.$refs.subNVueRef = subNVue; // 保存子页面引用
this.subNVueVisible = true; // 更新显示状态(实际中这一步可能不需要,因为createSubNVue已经显示了)
},
closeSubNVue() {
if (this.$refs.subNVueRef) {
this.$refs.subNVueRef.close(); // 尝试关闭子页面
this.subNVueVisible = false; // 更新显示状态
}
}
}
};
</script>
子页面 (sub.nvue)
子页面内容可以很简单,例如只包含一个文本标签。
<template>
<div>
<text>这是子页面</text>
</div>
</template>
<script>
export default {
// 子页面不需要额外逻辑,只需定义模板即可
};
</script>
注意事项
- 页面路径:确保
url
属性中的路径正确指向子页面文件。 - 引用管理:使用
ref
属性保存子页面的引用,以便后续调用close
方法。 - 方法调用:在调用
close
方法之前,确保子页面引用存在。 - 样式设置:根据需要调整
style
属性中的布局参数。
上述代码示例展示了如何在nvue页面中创建并控制subNVues
子页面。如果在实际应用中仍然遇到问题,请检查页面路径、方法调用时机以及uni-app和HBuilderX的版本兼容性。