uni-app HbuilderX 4.44版本 nvue页面添加subNVues子页面 无法通过hide或close方法隐藏或关闭

发布于 1周前 作者 ionicwang 来自 Uni-App

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方法,才能选择页面原生。


3 回复

你之前是什么版本?能不能提个复现工程?
安卓是否正常?


测试了一下,是条件编译有问题,我之前用的是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页面时,如果遇到无法通过hideclose方法隐藏或关闭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>

注意事项

  1. 页面路径:确保url属性中的路径正确指向子页面文件。
  2. 引用管理:使用ref属性保存子页面的引用,以便后续调用close方法。
  3. 方法调用:在调用close方法之前,确保子页面引用存在。
  4. 样式设置:根据需要调整style属性中的布局参数。

上述代码示例展示了如何在nvue页面中创建并控制subNVues子页面。如果在实际应用中仍然遇到问题,请检查页面路径、方法调用时机以及uni-app和HBuilderX的版本兼容性。

回到顶部